Basic parsing
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1 +1,2 @@
 | 
			
		||||
/target
 | 
			
		||||
.idea
 | 
			
		||||
							
								
								
									
										554
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										554
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,554 @@
 | 
			
		||||
# This file is automatically @generated by Cargo.
 | 
			
		||||
# It is not intended for manual editing.
 | 
			
		||||
version = 3
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "aho-corasick"
 | 
			
		||||
version = "0.7.20"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "memchr",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "autocfg"
 | 
			
		||||
version = "1.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "bitflags"
 | 
			
		||||
version = "1.3.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "cc"
 | 
			
		||||
version = "1.0.79"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "cfg-if"
 | 
			
		||||
version = "1.0.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "clap"
 | 
			
		||||
version = "4.1.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags",
 | 
			
		||||
 "clap_derive",
 | 
			
		||||
 "clap_lex",
 | 
			
		||||
 "is-terminal",
 | 
			
		||||
 "once_cell",
 | 
			
		||||
 "strsim",
 | 
			
		||||
 "termcolor",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "clap_derive"
 | 
			
		||||
version = "4.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "heck",
 | 
			
		||||
 "proc-macro-error",
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "clap_lex"
 | 
			
		||||
version = "0.3.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "os_str_bytes",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "dyn-clone"
 | 
			
		||||
version = "1.0.10"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "env_logger"
 | 
			
		||||
version = "0.10.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "humantime",
 | 
			
		||||
 "is-terminal",
 | 
			
		||||
 "log",
 | 
			
		||||
 "regex",
 | 
			
		||||
 "termcolor",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "errno"
 | 
			
		||||
version = "0.2.8"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "errno-dragonfly",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "winapi",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "errno-dragonfly"
 | 
			
		||||
version = "0.1.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cc",
 | 
			
		||||
 "libc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "hashbrown"
 | 
			
		||||
version = "0.12.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "heck"
 | 
			
		||||
version = "0.4.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "hermit-abi"
 | 
			
		||||
version = "0.2.6"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "humantime"
 | 
			
		||||
version = "2.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "indexmap"
 | 
			
		||||
version = "1.9.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "autocfg",
 | 
			
		||||
 "hashbrown",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "io-lifetimes"
 | 
			
		||||
version = "1.0.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
 "windows-sys 0.45.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "is-terminal"
 | 
			
		||||
version = "0.4.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "hermit-abi",
 | 
			
		||||
 "io-lifetimes",
 | 
			
		||||
 "rustix",
 | 
			
		||||
 "windows-sys 0.42.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "itoa"
 | 
			
		||||
version = "1.0.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "libc"
 | 
			
		||||
version = "0.2.139"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "linux-raw-sys"
 | 
			
		||||
version = "0.1.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "log"
 | 
			
		||||
version = "0.4.17"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "memchr"
 | 
			
		||||
version = "2.5.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "okapi"
 | 
			
		||||
version = "0.7.0-rc.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "ce66b6366e049880a35c378123fddb630b1a1a3c37fa1ca70caaf4a09f6e2893"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "log",
 | 
			
		||||
 "schemars",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "once_cell"
 | 
			
		||||
version = "1.17.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "openapi-schema-tree-dot"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "clap",
 | 
			
		||||
 "env_logger",
 | 
			
		||||
 "log",
 | 
			
		||||
 "okapi",
 | 
			
		||||
 "serde_yaml",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "os_str_bytes"
 | 
			
		||||
version = "6.4.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "proc-macro-error"
 | 
			
		||||
version = "1.0.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro-error-attr",
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
 "version_check",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "proc-macro-error-attr"
 | 
			
		||||
version = "1.0.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "version_check",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "proc-macro2"
 | 
			
		||||
version = "1.0.50"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "quote"
 | 
			
		||||
version = "1.0.23"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "regex"
 | 
			
		||||
version = "1.7.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "aho-corasick",
 | 
			
		||||
 "memchr",
 | 
			
		||||
 "regex-syntax",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "regex-syntax"
 | 
			
		||||
version = "0.6.28"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustix"
 | 
			
		||||
version = "0.36.7"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags",
 | 
			
		||||
 "errno",
 | 
			
		||||
 "io-lifetimes",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "linux-raw-sys",
 | 
			
		||||
 "windows-sys 0.42.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "ryu"
 | 
			
		||||
version = "1.0.12"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "schemars"
 | 
			
		||||
version = "0.8.11"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2a5fb6c61f29e723026dc8e923d94c694313212abbecbbe5f55a7748eec5b307"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "dyn-clone",
 | 
			
		||||
 "schemars_derive",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "schemars_derive"
 | 
			
		||||
version = "0.8.11"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f188d036977451159430f3b8dc82ec76364a42b7e289c2b18a9a18f4470058e9"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "serde_derive_internals",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde"
 | 
			
		||||
version = "1.0.152"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "serde_derive",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde_derive"
 | 
			
		||||
version = "1.0.152"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde_derive_internals"
 | 
			
		||||
version = "0.26.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde_json"
 | 
			
		||||
version = "1.0.91"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "itoa",
 | 
			
		||||
 "ryu",
 | 
			
		||||
 "serde",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde_yaml"
 | 
			
		||||
version = "0.9.17"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8fb06d4b6cdaef0e0c51fa881acb721bed3c924cfaa71d9c94a3b771dfdf6567"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "indexmap",
 | 
			
		||||
 "itoa",
 | 
			
		||||
 "ryu",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "unsafe-libyaml",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "strsim"
 | 
			
		||||
version = "0.10.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "syn"
 | 
			
		||||
version = "1.0.107"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "termcolor"
 | 
			
		||||
version = "1.2.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "winapi-util",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "unicode-ident"
 | 
			
		||||
version = "1.0.6"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "unsafe-libyaml"
 | 
			
		||||
version = "0.2.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bc7ed8ba44ca06be78ea1ad2c3682a43349126c8818054231ee6f4748012aed2"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "version_check"
 | 
			
		||||
version = "0.9.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi"
 | 
			
		||||
version = "0.3.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "winapi-i686-pc-windows-gnu",
 | 
			
		||||
 "winapi-x86_64-pc-windows-gnu",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi-i686-pc-windows-gnu"
 | 
			
		||||
version = "0.4.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi-util"
 | 
			
		||||
version = "0.1.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "winapi",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi-x86_64-pc-windows-gnu"
 | 
			
		||||
version = "0.4.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-sys"
 | 
			
		||||
version = "0.42.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows_aarch64_gnullvm",
 | 
			
		||||
 "windows_aarch64_msvc",
 | 
			
		||||
 "windows_i686_gnu",
 | 
			
		||||
 "windows_i686_msvc",
 | 
			
		||||
 "windows_x86_64_gnu",
 | 
			
		||||
 "windows_x86_64_gnullvm",
 | 
			
		||||
 "windows_x86_64_msvc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-sys"
 | 
			
		||||
version = "0.45.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows-targets",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-targets"
 | 
			
		||||
version = "0.42.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows_aarch64_gnullvm",
 | 
			
		||||
 "windows_aarch64_msvc",
 | 
			
		||||
 "windows_i686_gnu",
 | 
			
		||||
 "windows_i686_msvc",
 | 
			
		||||
 "windows_x86_64_gnu",
 | 
			
		||||
 "windows_x86_64_gnullvm",
 | 
			
		||||
 "windows_x86_64_msvc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_aarch64_gnullvm"
 | 
			
		||||
version = "0.42.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_aarch64_msvc"
 | 
			
		||||
version = "0.42.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_i686_gnu"
 | 
			
		||||
version = "0.42.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_i686_msvc"
 | 
			
		||||
version = "0.42.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_x86_64_gnu"
 | 
			
		||||
version = "0.42.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_x86_64_gnullvm"
 | 
			
		||||
version = "0.42.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows_x86_64_msvc"
 | 
			
		||||
version = "0.42.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
 | 
			
		||||
@@ -6,3 +6,8 @@ edition = "2021"
 | 
			
		||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
log = "0.4.17"
 | 
			
		||||
env_logger = "0.10.0"
 | 
			
		||||
clap = { version = "4.1.1", features = ["derive"] }
 | 
			
		||||
okapi = "0.7.0-rc.1"
 | 
			
		||||
serde_yaml = "0.9.17"
 | 
			
		||||
							
								
								
									
										802
									
								
								examples/petstore.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										802
									
								
								examples/petstore.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,802 @@
 | 
			
		||||
openapi: 3.0.3
 | 
			
		||||
info:
 | 
			
		||||
  title: Swagger Petstore - OpenAPI 3.0
 | 
			
		||||
  description: |-
 | 
			
		||||
    This is a sample Pet Store Server based on the OpenAPI 3.0 specification.  You can find out more about
 | 
			
		||||
    Swagger at [https://swagger.io](https://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!
 | 
			
		||||
    You can now help us improve the API whether it's by making changes to the definition itself or to the code.
 | 
			
		||||
    That way, with time, we can improve the API in general, and expose some of the new features in OAS3.
 | 
			
		||||
 | 
			
		||||
    _If you're looking for the Swagger 2.0/OAS 2.0 version of Petstore, then click [here](https://editor.swagger.io/?url=https://petstore.swagger.io/v2/swagger.yaml). Alternatively, you can load via the `Edit > Load Petstore OAS 2.0` menu option!_
 | 
			
		||||
    
 | 
			
		||||
    Some useful links:
 | 
			
		||||
    - [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)
 | 
			
		||||
    - [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)
 | 
			
		||||
  termsOfService: http://swagger.io/terms/
 | 
			
		||||
  contact:
 | 
			
		||||
    email: apiteam@swagger.io
 | 
			
		||||
  license:
 | 
			
		||||
    name: Apache 2.0
 | 
			
		||||
    url: http://www.apache.org/licenses/LICENSE-2.0.html
 | 
			
		||||
  version: 1.0.11
 | 
			
		||||
externalDocs:
 | 
			
		||||
  description: Find out more about Swagger
 | 
			
		||||
  url: http://swagger.io
 | 
			
		||||
servers:
 | 
			
		||||
  - url: https://petstore3.swagger.io/api/v3
 | 
			
		||||
tags:
 | 
			
		||||
  - name: pet
 | 
			
		||||
    description: Everything about your Pets
 | 
			
		||||
    externalDocs:
 | 
			
		||||
      description: Find out more
 | 
			
		||||
      url: http://swagger.io
 | 
			
		||||
  - name: store
 | 
			
		||||
    description: Access to Petstore orders
 | 
			
		||||
    externalDocs:
 | 
			
		||||
      description: Find out more about our store
 | 
			
		||||
      url: http://swagger.io
 | 
			
		||||
  - name: user
 | 
			
		||||
    description: Operations about user
 | 
			
		||||
paths:
 | 
			
		||||
  /pet:
 | 
			
		||||
    put:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pet
 | 
			
		||||
      summary: Update an existing pet
 | 
			
		||||
      description: Update an existing pet by Id
 | 
			
		||||
      operationId: updatePet
 | 
			
		||||
      requestBody:
 | 
			
		||||
        description: Update an existent pet in the store
 | 
			
		||||
        content:
 | 
			
		||||
          application/json:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/Pet'
 | 
			
		||||
          application/xml:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/Pet'
 | 
			
		||||
          application/x-www-form-urlencoded:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/Pet'
 | 
			
		||||
        required: true
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: Successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/Pet'          
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/Pet'
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid ID supplied
 | 
			
		||||
        '404':
 | 
			
		||||
          description: Pet not found
 | 
			
		||||
        '405':
 | 
			
		||||
          description: Validation exception
 | 
			
		||||
      security:
 | 
			
		||||
        - petstore_auth:
 | 
			
		||||
            - write:pets
 | 
			
		||||
            - read:pets
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pet
 | 
			
		||||
      summary: Add a new pet to the store
 | 
			
		||||
      description: Add a new pet to the store
 | 
			
		||||
      operationId: addPet
 | 
			
		||||
      requestBody:
 | 
			
		||||
        description: Create a new pet in the store
 | 
			
		||||
        content:
 | 
			
		||||
          application/json:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/Pet'
 | 
			
		||||
          application/xml:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/Pet'
 | 
			
		||||
          application/x-www-form-urlencoded:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/Pet'
 | 
			
		||||
        required: true
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: Successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/Pet'          
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/Pet'
 | 
			
		||||
        '405':
 | 
			
		||||
          description: Invalid input
 | 
			
		||||
      security:
 | 
			
		||||
        - petstore_auth:
 | 
			
		||||
            - write:pets
 | 
			
		||||
            - read:pets
 | 
			
		||||
  /pet/findByStatus:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pet
 | 
			
		||||
      summary: Finds Pets by status
 | 
			
		||||
      description: Multiple status values can be provided with comma separated strings
 | 
			
		||||
      operationId: findPetsByStatus
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: status
 | 
			
		||||
          in: query
 | 
			
		||||
          description: Status values that need to be considered for filter
 | 
			
		||||
          required: false
 | 
			
		||||
          explode: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
            default: available
 | 
			
		||||
            enum:
 | 
			
		||||
              - available
 | 
			
		||||
              - pending
 | 
			
		||||
              - sold
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: array
 | 
			
		||||
                items:
 | 
			
		||||
                  $ref: '#/components/schemas/Pet'          
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: array
 | 
			
		||||
                items:
 | 
			
		||||
                  $ref: '#/components/schemas/Pet'
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid status value
 | 
			
		||||
      security:
 | 
			
		||||
        - petstore_auth:
 | 
			
		||||
            - write:pets
 | 
			
		||||
            - read:pets
 | 
			
		||||
  /pet/findByTags:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pet
 | 
			
		||||
      summary: Finds Pets by tags
 | 
			
		||||
      description: Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
 | 
			
		||||
      operationId: findPetsByTags
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: tags
 | 
			
		||||
          in: query
 | 
			
		||||
          description: Tags to filter by
 | 
			
		||||
          required: false
 | 
			
		||||
          explode: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: array
 | 
			
		||||
            items:
 | 
			
		||||
              type: string
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: array
 | 
			
		||||
                items:
 | 
			
		||||
                  $ref: '#/components/schemas/Pet'          
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: array
 | 
			
		||||
                items:
 | 
			
		||||
                  $ref: '#/components/schemas/Pet'
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid tag value
 | 
			
		||||
      security:
 | 
			
		||||
        - petstore_auth:
 | 
			
		||||
            - write:pets
 | 
			
		||||
            - read:pets
 | 
			
		||||
  /pet/{petId}:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pet
 | 
			
		||||
      summary: Find pet by ID
 | 
			
		||||
      description: Returns a single pet
 | 
			
		||||
      operationId: getPetById
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: petId
 | 
			
		||||
          in: path
 | 
			
		||||
          description: ID of pet to return
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: integer
 | 
			
		||||
            format: int64
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/Pet'          
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/Pet'
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid ID supplied
 | 
			
		||||
        '404':
 | 
			
		||||
          description: Pet not found
 | 
			
		||||
      security:
 | 
			
		||||
        - api_key: []
 | 
			
		||||
        - petstore_auth:
 | 
			
		||||
            - write:pets
 | 
			
		||||
            - read:pets
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pet
 | 
			
		||||
      summary: Updates a pet in the store with form data
 | 
			
		||||
      description: ''
 | 
			
		||||
      operationId: updatePetWithForm
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: petId
 | 
			
		||||
          in: path
 | 
			
		||||
          description: ID of pet that needs to be updated
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: integer
 | 
			
		||||
            format: int64
 | 
			
		||||
        - name: name
 | 
			
		||||
          in: query
 | 
			
		||||
          description: Name of pet that needs to be updated
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
        - name: status
 | 
			
		||||
          in: query
 | 
			
		||||
          description: Status of pet that needs to be updated
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
      responses:
 | 
			
		||||
        '405':
 | 
			
		||||
          description: Invalid input
 | 
			
		||||
      security:
 | 
			
		||||
        - petstore_auth:
 | 
			
		||||
            - write:pets
 | 
			
		||||
            - read:pets
 | 
			
		||||
    delete:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pet
 | 
			
		||||
      summary: Deletes a pet
 | 
			
		||||
      description: delete a pet
 | 
			
		||||
      operationId: deletePet
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: api_key
 | 
			
		||||
          in: header
 | 
			
		||||
          description: ''
 | 
			
		||||
          required: false
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
        - name: petId
 | 
			
		||||
          in: path
 | 
			
		||||
          description: Pet id to delete
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: integer
 | 
			
		||||
            format: int64
 | 
			
		||||
      responses:
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid pet value
 | 
			
		||||
      security:
 | 
			
		||||
        - petstore_auth:
 | 
			
		||||
            - write:pets
 | 
			
		||||
            - read:pets
 | 
			
		||||
  /pet/{petId}/uploadImage:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pet
 | 
			
		||||
      summary: uploads an image
 | 
			
		||||
      description: ''
 | 
			
		||||
      operationId: uploadFile
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: petId
 | 
			
		||||
          in: path
 | 
			
		||||
          description: ID of pet to update
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: integer
 | 
			
		||||
            format: int64
 | 
			
		||||
        - name: additionalMetadata
 | 
			
		||||
          in: query
 | 
			
		||||
          description: Additional Metadata
 | 
			
		||||
          required: false
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
      requestBody:
 | 
			
		||||
        content:
 | 
			
		||||
          application/octet-stream:
 | 
			
		||||
            schema:
 | 
			
		||||
              type: string
 | 
			
		||||
              format: binary
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/ApiResponse'
 | 
			
		||||
      security:
 | 
			
		||||
        - petstore_auth:
 | 
			
		||||
            - write:pets
 | 
			
		||||
            - read:pets
 | 
			
		||||
  /store/inventory:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - store
 | 
			
		||||
      summary: Returns pet inventories by status
 | 
			
		||||
      description: Returns a map of status codes to quantities
 | 
			
		||||
      operationId: getInventory
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: object
 | 
			
		||||
                additionalProperties:
 | 
			
		||||
                  type: integer
 | 
			
		||||
                  format: int32
 | 
			
		||||
      security:
 | 
			
		||||
        - api_key: []
 | 
			
		||||
  /store/order:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - store
 | 
			
		||||
      summary: Place an order for a pet
 | 
			
		||||
      description: Place a new order in the store
 | 
			
		||||
      operationId: placeOrder
 | 
			
		||||
      requestBody:
 | 
			
		||||
        content:
 | 
			
		||||
          application/json:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/Order'
 | 
			
		||||
          application/xml:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/Order'
 | 
			
		||||
          application/x-www-form-urlencoded:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/Order'
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/Order'
 | 
			
		||||
        '405':
 | 
			
		||||
          description: Invalid input
 | 
			
		||||
  /store/order/{orderId}:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - store
 | 
			
		||||
      summary: Find purchase order by ID
 | 
			
		||||
      description: For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions.
 | 
			
		||||
      operationId: getOrderById
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: orderId
 | 
			
		||||
          in: path
 | 
			
		||||
          description: ID of order that needs to be fetched
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: integer
 | 
			
		||||
            format: int64
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/Order'          
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/Order'
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid ID supplied
 | 
			
		||||
        '404':
 | 
			
		||||
          description: Order not found
 | 
			
		||||
    delete:
 | 
			
		||||
      tags:
 | 
			
		||||
        - store
 | 
			
		||||
      summary: Delete purchase order by ID
 | 
			
		||||
      description: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
 | 
			
		||||
      operationId: deleteOrder
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: orderId
 | 
			
		||||
          in: path
 | 
			
		||||
          description: ID of the order that needs to be deleted
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: integer
 | 
			
		||||
            format: int64
 | 
			
		||||
      responses:
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid ID supplied
 | 
			
		||||
        '404':
 | 
			
		||||
          description: Order not found
 | 
			
		||||
  /user:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - user
 | 
			
		||||
      summary: Create user
 | 
			
		||||
      description: This can only be done by the logged in user.
 | 
			
		||||
      operationId: createUser
 | 
			
		||||
      requestBody:
 | 
			
		||||
        description: Created user object
 | 
			
		||||
        content:
 | 
			
		||||
          application/json:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/User'
 | 
			
		||||
          application/xml:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/User'
 | 
			
		||||
          application/x-www-form-urlencoded:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/User'
 | 
			
		||||
      responses:
 | 
			
		||||
        default:
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/User'
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/User'
 | 
			
		||||
  /user/createWithList:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - user
 | 
			
		||||
      summary: Creates list of users with given input array
 | 
			
		||||
      description: Creates list of users with given input array
 | 
			
		||||
      operationId: createUsersWithListInput
 | 
			
		||||
      requestBody:
 | 
			
		||||
        content:
 | 
			
		||||
          application/json:
 | 
			
		||||
            schema:
 | 
			
		||||
              type: array
 | 
			
		||||
              items:
 | 
			
		||||
                $ref: '#/components/schemas/User'
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: Successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/User'          
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/User'
 | 
			
		||||
        default:
 | 
			
		||||
          description: successful operation
 | 
			
		||||
  /user/login:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - user
 | 
			
		||||
      summary: Logs user into the system
 | 
			
		||||
      description: ''
 | 
			
		||||
      operationId: loginUser
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: username
 | 
			
		||||
          in: query
 | 
			
		||||
          description: The user name for login
 | 
			
		||||
          required: false
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
        - name: password
 | 
			
		||||
          in: query
 | 
			
		||||
          description: The password for login in clear text
 | 
			
		||||
          required: false
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          headers:
 | 
			
		||||
            X-Rate-Limit:
 | 
			
		||||
              description: calls per hour allowed by the user
 | 
			
		||||
              schema:
 | 
			
		||||
                type: integer
 | 
			
		||||
                format: int32
 | 
			
		||||
            X-Expires-After:
 | 
			
		||||
              description: date in UTC when token expires
 | 
			
		||||
              schema:
 | 
			
		||||
                type: string
 | 
			
		||||
                format: date-time
 | 
			
		||||
          content:
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: string
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: string
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid username/password supplied
 | 
			
		||||
  /user/logout:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - user
 | 
			
		||||
      summary: Logs out current logged in user session
 | 
			
		||||
      description: ''
 | 
			
		||||
      operationId: logoutUser
 | 
			
		||||
      parameters: []
 | 
			
		||||
      responses:
 | 
			
		||||
        default:
 | 
			
		||||
          description: successful operation
 | 
			
		||||
  /user/{username}:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - user
 | 
			
		||||
      summary: Get user by user name
 | 
			
		||||
      description: ''
 | 
			
		||||
      operationId: getUserByName
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: username
 | 
			
		||||
          in: path
 | 
			
		||||
          description: 'The name that needs to be fetched. Use user1 for testing. '
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: successful operation
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/User'          
 | 
			
		||||
            application/xml:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/User'
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid username supplied
 | 
			
		||||
        '404':
 | 
			
		||||
          description: User not found
 | 
			
		||||
    put:
 | 
			
		||||
      tags:
 | 
			
		||||
        - user
 | 
			
		||||
      summary: Update user
 | 
			
		||||
      description: This can only be done by the logged in user.
 | 
			
		||||
      operationId: updateUser
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: username
 | 
			
		||||
          in: path
 | 
			
		||||
          description: name that need to be deleted
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
      requestBody:
 | 
			
		||||
        description: Update an existent user in the store
 | 
			
		||||
        content:
 | 
			
		||||
          application/json:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/User'
 | 
			
		||||
          application/xml:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/User'
 | 
			
		||||
          application/x-www-form-urlencoded:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: '#/components/schemas/User'
 | 
			
		||||
      responses:
 | 
			
		||||
        default:
 | 
			
		||||
          description: successful operation
 | 
			
		||||
    delete:
 | 
			
		||||
      tags:
 | 
			
		||||
        - user
 | 
			
		||||
      summary: Delete user
 | 
			
		||||
      description: This can only be done by the logged in user.
 | 
			
		||||
      operationId: deleteUser
 | 
			
		||||
      parameters:
 | 
			
		||||
        - name: username
 | 
			
		||||
          in: path
 | 
			
		||||
          description: The name that needs to be deleted
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
      responses:
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Invalid username supplied
 | 
			
		||||
        '404':
 | 
			
		||||
          description: User not found
 | 
			
		||||
components:
 | 
			
		||||
  schemas:
 | 
			
		||||
    Order:
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        id:
 | 
			
		||||
          type: integer
 | 
			
		||||
          format: int64
 | 
			
		||||
          example: 10
 | 
			
		||||
        petId:
 | 
			
		||||
          type: integer
 | 
			
		||||
          format: int64
 | 
			
		||||
          example: 198772
 | 
			
		||||
        quantity:
 | 
			
		||||
          type: integer
 | 
			
		||||
          format: int32
 | 
			
		||||
          example: 7
 | 
			
		||||
        shipDate:
 | 
			
		||||
          type: string
 | 
			
		||||
          format: date-time
 | 
			
		||||
        status:
 | 
			
		||||
          type: string
 | 
			
		||||
          description: Order Status
 | 
			
		||||
          example: approved
 | 
			
		||||
          enum:
 | 
			
		||||
            - placed
 | 
			
		||||
            - approved
 | 
			
		||||
            - delivered
 | 
			
		||||
        complete:
 | 
			
		||||
          type: boolean
 | 
			
		||||
      xml:
 | 
			
		||||
        name: order
 | 
			
		||||
    Customer:
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        id:
 | 
			
		||||
          type: integer
 | 
			
		||||
          format: int64
 | 
			
		||||
          example: 100000
 | 
			
		||||
        username:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: fehguy
 | 
			
		||||
        address:
 | 
			
		||||
          type: array
 | 
			
		||||
          xml:
 | 
			
		||||
            name: addresses
 | 
			
		||||
            wrapped: true
 | 
			
		||||
          items:
 | 
			
		||||
            $ref: '#/components/schemas/Address'
 | 
			
		||||
      xml:
 | 
			
		||||
        name: customer
 | 
			
		||||
    Address:
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        street:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: 437 Lytton
 | 
			
		||||
        city:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: Palo Alto
 | 
			
		||||
        state:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: CA
 | 
			
		||||
        zip:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: '94301'
 | 
			
		||||
      xml:
 | 
			
		||||
        name: address
 | 
			
		||||
    Category:
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        id:
 | 
			
		||||
          type: integer
 | 
			
		||||
          format: int64
 | 
			
		||||
          example: 1
 | 
			
		||||
        name:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: Dogs
 | 
			
		||||
      xml:
 | 
			
		||||
        name: category
 | 
			
		||||
    User:
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        id:
 | 
			
		||||
          type: integer
 | 
			
		||||
          format: int64
 | 
			
		||||
          example: 10
 | 
			
		||||
        username:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: theUser
 | 
			
		||||
        firstName:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: John
 | 
			
		||||
        lastName:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: James
 | 
			
		||||
        email:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: john@email.com
 | 
			
		||||
        password:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: '12345'
 | 
			
		||||
        phone:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: '12345'
 | 
			
		||||
        userStatus:
 | 
			
		||||
          type: integer
 | 
			
		||||
          description: User Status
 | 
			
		||||
          format: int32
 | 
			
		||||
          example: 1
 | 
			
		||||
      xml:
 | 
			
		||||
        name: user
 | 
			
		||||
    Tag:
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        id:
 | 
			
		||||
          type: integer
 | 
			
		||||
          format: int64
 | 
			
		||||
        name:
 | 
			
		||||
          type: string
 | 
			
		||||
      xml:
 | 
			
		||||
        name: tag
 | 
			
		||||
    Pet:
 | 
			
		||||
      required:
 | 
			
		||||
        - name
 | 
			
		||||
        - photoUrls
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        id:
 | 
			
		||||
          type: integer
 | 
			
		||||
          format: int64
 | 
			
		||||
          example: 10
 | 
			
		||||
        name:
 | 
			
		||||
          type: string
 | 
			
		||||
          example: doggie
 | 
			
		||||
        category:
 | 
			
		||||
          $ref: '#/components/schemas/Category'
 | 
			
		||||
        photoUrls:
 | 
			
		||||
          type: array
 | 
			
		||||
          xml:
 | 
			
		||||
            wrapped: true
 | 
			
		||||
          items:
 | 
			
		||||
            type: string
 | 
			
		||||
            xml:
 | 
			
		||||
              name: photoUrl
 | 
			
		||||
        tags:
 | 
			
		||||
          type: array
 | 
			
		||||
          xml:
 | 
			
		||||
            wrapped: true
 | 
			
		||||
          items:
 | 
			
		||||
            $ref: '#/components/schemas/Tag'
 | 
			
		||||
        status:
 | 
			
		||||
          type: string
 | 
			
		||||
          description: pet status in the store
 | 
			
		||||
          enum:
 | 
			
		||||
            - available
 | 
			
		||||
            - pending
 | 
			
		||||
            - sold
 | 
			
		||||
      xml:
 | 
			
		||||
        name: pet
 | 
			
		||||
    ApiResponse:
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        code:
 | 
			
		||||
          type: integer
 | 
			
		||||
          format: int32
 | 
			
		||||
        type:
 | 
			
		||||
          type: string
 | 
			
		||||
        message:
 | 
			
		||||
          type: string
 | 
			
		||||
      xml:
 | 
			
		||||
        name: '##default'
 | 
			
		||||
  requestBodies:
 | 
			
		||||
    Pet:
 | 
			
		||||
      description: Pet object that needs to be added to the store
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            $ref: '#/components/schemas/Pet'
 | 
			
		||||
        application/xml:
 | 
			
		||||
          schema:
 | 
			
		||||
            $ref: '#/components/schemas/Pet'
 | 
			
		||||
    UserArray:
 | 
			
		||||
      description: List of user object
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            type: array
 | 
			
		||||
            items:
 | 
			
		||||
              $ref: '#/components/schemas/User'
 | 
			
		||||
  securitySchemes:
 | 
			
		||||
    petstore_auth:
 | 
			
		||||
      type: oauth2
 | 
			
		||||
      flows:
 | 
			
		||||
        implicit:
 | 
			
		||||
          authorizationUrl: https://petstore3.swagger.io/oauth/authorize
 | 
			
		||||
          scopes:
 | 
			
		||||
            write:pets: modify pets in your account
 | 
			
		||||
            read:pets: read your pets
 | 
			
		||||
    api_key:
 | 
			
		||||
      type: apiKey
 | 
			
		||||
      name: api_key
 | 
			
		||||
      in: header
 | 
			
		||||
							
								
								
									
										144
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										144
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -1,3 +1,143 @@
 | 
			
		||||
fn main() {
 | 
			
		||||
    println!("Hello, world!");
 | 
			
		||||
use clap::Parser;
 | 
			
		||||
use okapi::openapi3::{Components, SchemaObject};
 | 
			
		||||
use okapi::schemars::schema::{InstanceType, Schema, SingleOrVec};
 | 
			
		||||
 | 
			
		||||
/// Dump the tree structure of a schema element as dot file
 | 
			
		||||
#[derive(Parser, Debug)]
 | 
			
		||||
#[command(author, version, about, long_about = None)]
 | 
			
		||||
struct Args {
 | 
			
		||||
    /// The name of the file to dump
 | 
			
		||||
    ///
 | 
			
		||||
    /// If this value is unspecified, the default petstore schema
 | 
			
		||||
    /// is used instead
 | 
			
		||||
    #[arg(short, long)]
 | 
			
		||||
    file_name: Option<String>,
 | 
			
		||||
 | 
			
		||||
    /// The name of the structure to dump
 | 
			
		||||
    #[arg(short, long, default_value = "Pet")]
 | 
			
		||||
    struct_name: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
enum NodeType {
 | 
			
		||||
    Null,
 | 
			
		||||
    Boolean,
 | 
			
		||||
    Array { item: Box<TreeNode> },
 | 
			
		||||
    Object { children: Vec<TreeNode> },
 | 
			
		||||
    String,
 | 
			
		||||
    Number,
 | 
			
		||||
    Integer,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
struct TreeNode {
 | 
			
		||||
    name: String,
 | 
			
		||||
    r#type: NodeType,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
 | 
			
		||||
 | 
			
		||||
    let args = Args::parse();
 | 
			
		||||
 | 
			
		||||
    let file_content = match args.file_name {
 | 
			
		||||
        None => include_str!("../examples/petstore.yaml").to_string(),
 | 
			
		||||
        Some(path) => std::fs::read_to_string(path).expect("Unable to load schema file!"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Parse schema
 | 
			
		||||
    let schema = serde_yaml::from_str::<okapi::openapi3::OpenApi>(&file_content)
 | 
			
		||||
        .expect("Failed to parse document");
 | 
			
		||||
 | 
			
		||||
    if schema.components.is_none() {
 | 
			
		||||
        log::error!("components is missing!");
 | 
			
		||||
        panic!()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let tree = build_tree(&args.struct_name, schema.components.as_ref().unwrap());
 | 
			
		||||
 | 
			
		||||
    println!("{:#?}", tree);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn expect_single<E>(e: &SingleOrVec<E>) -> &E {
 | 
			
		||||
    match e {
 | 
			
		||||
        SingleOrVec::Single(e) => &e,
 | 
			
		||||
        SingleOrVec::Vec(v) => &v[0],
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn expect_schema_object(s: &Schema) -> &SchemaObject {
 | 
			
		||||
    match s {
 | 
			
		||||
        Schema::Bool(_) => {
 | 
			
		||||
            panic!("Got unexpected bool!");
 | 
			
		||||
        }
 | 
			
		||||
        Schema::Object(o) => o,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn build_tree(struct_name: &str, components: &Components) -> TreeNode {
 | 
			
		||||
    let schema = components
 | 
			
		||||
        .schemas
 | 
			
		||||
        .get(struct_name)
 | 
			
		||||
        .expect(&format!("Missing {struct_name}"));
 | 
			
		||||
 | 
			
		||||
    build_tree_schema(schema, struct_name, components)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn build_tree_schema(
 | 
			
		||||
    schema: &SchemaObject,
 | 
			
		||||
    struct_name: &str,
 | 
			
		||||
    components: &Components,
 | 
			
		||||
) -> TreeNode {
 | 
			
		||||
    if let Some(name) = &schema.reference {
 | 
			
		||||
        return build_tree(
 | 
			
		||||
            name.strip_prefix("#/components/schemas/").unwrap(),
 | 
			
		||||
            components,
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let schema_type = schema
 | 
			
		||||
        .instance_type
 | 
			
		||||
        .as_ref()
 | 
			
		||||
        .map(expect_single)
 | 
			
		||||
        .unwrap_or(&InstanceType::String);
 | 
			
		||||
 | 
			
		||||
    let r#type = match schema_type {
 | 
			
		||||
        InstanceType::Null => NodeType::Null,
 | 
			
		||||
        InstanceType::Boolean => NodeType::Boolean,
 | 
			
		||||
        InstanceType::Object => {
 | 
			
		||||
            let children = schema
 | 
			
		||||
                .object
 | 
			
		||||
                .as_ref()
 | 
			
		||||
                .unwrap()
 | 
			
		||||
                .properties
 | 
			
		||||
                .iter()
 | 
			
		||||
                .map(|e| {
 | 
			
		||||
                    let o = expect_schema_object(e.1);
 | 
			
		||||
                    build_tree_schema(o, e.0, components)
 | 
			
		||||
                })
 | 
			
		||||
                .collect::<Vec<_>>();
 | 
			
		||||
            NodeType::Object { children }
 | 
			
		||||
        }
 | 
			
		||||
        InstanceType::Array => {
 | 
			
		||||
            let item = expect_schema_object(expect_single(
 | 
			
		||||
                schema.array.as_ref().unwrap().items.as_ref().unwrap(),
 | 
			
		||||
            ));
 | 
			
		||||
            NodeType::Array {
 | 
			
		||||
                item: Box::new(build_tree_schema(
 | 
			
		||||
                    item,
 | 
			
		||||
                    &format!("{struct_name}[]"),
 | 
			
		||||
                    components,
 | 
			
		||||
                )),
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        InstanceType::Number => NodeType::Number,
 | 
			
		||||
        InstanceType::String => NodeType::String,
 | 
			
		||||
        InstanceType::Integer => NodeType::Integer,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    TreeNode {
 | 
			
		||||
        name: struct_name.to_string(),
 | 
			
		||||
        r#type,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user