rj_schema 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Rakefile +18 -0
- data/ext/rj_schema/extconf.rb +7 -0
- data/ext/rj_schema/rapidjson/CHANGELOG.md +158 -0
- data/ext/rj_schema/rapidjson/CMakeLists.txt +221 -0
- data/ext/rj_schema/rapidjson/CMakeModules/FindGTestSrc.cmake +30 -0
- data/ext/rj_schema/rapidjson/RapidJSON.pc.in +7 -0
- data/ext/rj_schema/rapidjson/RapidJSONConfig.cmake.in +15 -0
- data/ext/rj_schema/rapidjson/RapidJSONConfigVersion.cmake.in +10 -0
- data/ext/rj_schema/rapidjson/appveyor.yml +41 -0
- data/ext/rj_schema/rapidjson/bin/data/glossary.json +22 -0
- data/ext/rj_schema/rapidjson/bin/data/menu.json +27 -0
- data/ext/rj_schema/rapidjson/bin/data/readme.txt +1 -0
- data/ext/rj_schema/rapidjson/bin/data/sample.json +3315 -0
- data/ext/rj_schema/rapidjson/bin/data/webapp.json +88 -0
- data/ext/rj_schema/rapidjson/bin/data/widget.json +26 -0
- data/ext/rj_schema/rapidjson/bin/draft-04/schema +150 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16be.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16bebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16le.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16lebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32be.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32bebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32le.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32lebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf8.json +7 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf8bom.json +7 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail1.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail10.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail11.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail12.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail13.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail14.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail15.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail16.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail17.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail18.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail19.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail2.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail20.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail21.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail22.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail23.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail24.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail25.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail26.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail27.json +2 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail28.json +2 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail29.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail3.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail30.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail31.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail32.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail33.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail4.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail5.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail6.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail7.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail8.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail9.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/pass1.json +58 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/pass2.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/pass3.json +6 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/readme.txt +3 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/LICENSE +19 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/README.md +148 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/bin/jsonschema_suite +283 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json +3 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/integer.json +3 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/subSchemas.json +8 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json +82 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json +88 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/default.json +49 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/dependencies.json +108 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/disallow.json +80 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json +60 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/enum.json +71 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/extends.json +94 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/items.json +46 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maxItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maxLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maximum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minimum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json +107 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/format.json +222 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json +18 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json +15 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/pattern.json +34 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json +110 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/properties.json +92 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/ref.json +159 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/refRemote.json +74 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/required.json +53 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/type.json +474 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json +79 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json +82 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json +88 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/allOf.json +112 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/anyOf.json +68 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/default.json +49 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/definitions.json +32 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/dependencies.json +113 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/enum.json +72 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/items.json +46 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maximum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minProperties.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minimum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json +60 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/not.json +96 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/oneOf.json +68 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json +107 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/format.json +148 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json +15 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/pattern.json +34 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json +110 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/properties.json +92 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/ref.json +159 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/refRemote.json +74 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/required.json +39 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/type.json +330 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json +79 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tox.ini +8 -0
- data/ext/rj_schema/rapidjson/bin/types/booleans.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/floats.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/guids.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/integers.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/mixed.json +592 -0
- data/ext/rj_schema/rapidjson/bin/types/nulls.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/paragraphs.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/readme.txt +1 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/LICENSE +45 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/README.md +7 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/rapidjson.natvis +38 -0
- data/ext/rj_schema/rapidjson/doc/CMakeLists.txt +27 -0
- data/ext/rj_schema/rapidjson/doc/Doxyfile.in +2369 -0
- data/ext/rj_schema/rapidjson/doc/Doxyfile.zh-cn.in +2369 -0
- data/ext/rj_schema/rapidjson/doc/diagram/architecture.dot +50 -0
- data/ext/rj_schema/rapidjson/doc/diagram/architecture.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/insituparsing.dot +65 -0
- data/ext/rj_schema/rapidjson/doc/diagram/insituparsing.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/iterative-parser-states-diagram.dot +62 -0
- data/ext/rj_schema/rapidjson/doc/diagram/iterative-parser-states-diagram.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/makefile +8 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move1.dot +47 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move1.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move2.dot +62 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move2.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move3.dot +60 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move3.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/normalparsing.dot +56 -0
- data/ext/rj_schema/rapidjson/doc/diagram/normalparsing.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/simpledom.dot +54 -0
- data/ext/rj_schema/rapidjson/doc/diagram/simpledom.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/tutorial.dot +58 -0
- data/ext/rj_schema/rapidjson/doc/diagram/tutorial.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/utilityclass.dot +73 -0
- data/ext/rj_schema/rapidjson/doc/diagram/utilityclass.png +0 -0
- data/ext/rj_schema/rapidjson/doc/dom.md +280 -0
- data/ext/rj_schema/rapidjson/doc/dom.zh-cn.md +284 -0
- data/ext/rj_schema/rapidjson/doc/encoding.md +146 -0
- data/ext/rj_schema/rapidjson/doc/encoding.zh-cn.md +152 -0
- data/ext/rj_schema/rapidjson/doc/faq.md +289 -0
- data/ext/rj_schema/rapidjson/doc/faq.zh-cn.md +290 -0
- data/ext/rj_schema/rapidjson/doc/features.md +104 -0
- data/ext/rj_schema/rapidjson/doc/features.zh-cn.md +103 -0
- data/ext/rj_schema/rapidjson/doc/internals.md +368 -0
- data/ext/rj_schema/rapidjson/doc/internals.zh-cn.md +363 -0
- data/ext/rj_schema/rapidjson/doc/logo/rapidjson.png +0 -0
- data/ext/rj_schema/rapidjson/doc/logo/rapidjson.svg +119 -0
- data/ext/rj_schema/rapidjson/doc/misc/DoxygenLayout.xml +194 -0
- data/ext/rj_schema/rapidjson/doc/misc/doxygenextra.css +274 -0
- data/ext/rj_schema/rapidjson/doc/misc/footer.html +11 -0
- data/ext/rj_schema/rapidjson/doc/misc/header.html +24 -0
- data/ext/rj_schema/rapidjson/doc/npm.md +31 -0
- data/ext/rj_schema/rapidjson/doc/performance.md +26 -0
- data/ext/rj_schema/rapidjson/doc/performance.zh-cn.md +26 -0
- data/ext/rj_schema/rapidjson/doc/pointer.md +234 -0
- data/ext/rj_schema/rapidjson/doc/pointer.zh-cn.md +234 -0
- data/ext/rj_schema/rapidjson/doc/sax.md +509 -0
- data/ext/rj_schema/rapidjson/doc/sax.zh-cn.md +487 -0
- data/ext/rj_schema/rapidjson/doc/schema.md +505 -0
- data/ext/rj_schema/rapidjson/doc/schema.zh-cn.md +237 -0
- data/ext/rj_schema/rapidjson/doc/stream.md +426 -0
- data/ext/rj_schema/rapidjson/doc/stream.zh-cn.md +426 -0
- data/ext/rj_schema/rapidjson/doc/tutorial.md +536 -0
- data/ext/rj_schema/rapidjson/doc/tutorial.zh-cn.md +534 -0
- data/ext/rj_schema/rapidjson/docker/debian/Dockerfile +8 -0
- data/ext/rj_schema/rapidjson/example/CMakeLists.txt +45 -0
- data/ext/rj_schema/rapidjson/example/archiver/archiver.cpp +292 -0
- data/ext/rj_schema/rapidjson/example/archiver/archiver.h +145 -0
- data/ext/rj_schema/rapidjson/example/archiver/archivertest.cpp +287 -0
- data/ext/rj_schema/rapidjson/example/capitalize/capitalize.cpp +67 -0
- data/ext/rj_schema/rapidjson/example/condense/condense.cpp +32 -0
- data/ext/rj_schema/rapidjson/example/filterkey/filterkey.cpp +135 -0
- data/ext/rj_schema/rapidjson/example/filterkeydom/filterkeydom.cpp +170 -0
- data/ext/rj_schema/rapidjson/example/jsonx/jsonx.cpp +207 -0
- data/ext/rj_schema/rapidjson/example/lookaheadparser/lookaheadparser.cpp +350 -0
- data/ext/rj_schema/rapidjson/example/messagereader/messagereader.cpp +105 -0
- data/ext/rj_schema/rapidjson/example/parsebyparts/parsebyparts.cpp +176 -0
- data/ext/rj_schema/rapidjson/example/pretty/pretty.cpp +30 -0
- data/ext/rj_schema/rapidjson/example/prettyauto/prettyauto.cpp +56 -0
- data/ext/rj_schema/rapidjson/example/schemavalidator/schemavalidator.cpp +78 -0
- data/ext/rj_schema/rapidjson/example/serialize/serialize.cpp +173 -0
- data/ext/rj_schema/rapidjson/example/simpledom/simpledom.cpp +29 -0
- data/ext/rj_schema/rapidjson/example/simplepullreader/simplepullreader.cpp +53 -0
- data/ext/rj_schema/rapidjson/example/simplereader/simplereader.cpp +42 -0
- data/ext/rj_schema/rapidjson/example/simplewriter/simplewriter.cpp +36 -0
- data/ext/rj_schema/rapidjson/example/tutorial/tutorial.cpp +151 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/allocators.h +271 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/cursorstreamwrapper.h +78 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/document.h +2630 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/encodedstream.h +299 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/encodings.h +716 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/error/en.h +74 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/error/error.h +161 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/filereadstream.h +99 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/filewritestream.h +104 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/fwd.h +151 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/biginteger.h +290 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/diyfp.h +258 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/dtoa.h +245 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/ieee754.h +78 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/itoa.h +304 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/meta.h +181 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/pow10.h +55 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/regex.h +734 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/stack.h +231 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strfunc.h +69 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strtod.h +269 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/swap.h +46 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/istreamwrapper.h +115 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/memorybuffer.h +70 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/memorystream.h +71 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/msinttypes/inttypes.h +316 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/msinttypes/stdint.h +300 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/ostreamwrapper.h +81 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/pointer.h +1363 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/prettywriter.h +277 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/rapidjson.h +628 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/reader.h +2222 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/schema.h +2479 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/stream.h +223 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/stringbuffer.h +121 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/writer.h +716 -0
- data/ext/rj_schema/rapidjson/include_dirs.js +2 -0
- data/ext/rj_schema/rapidjson/library.json +15 -0
- data/ext/rj_schema/rapidjson/license.txt +57 -0
- data/ext/rj_schema/rapidjson/package.json +24 -0
- data/ext/rj_schema/rapidjson/rapidjson.autopkg +77 -0
- data/ext/rj_schema/rapidjson/readme.md +160 -0
- data/ext/rj_schema/rapidjson/readme.zh-cn.md +152 -0
- data/ext/rj_schema/rapidjson/test/CMakeLists.txt +20 -0
- data/ext/rj_schema/rapidjson/test/perftest/CMakeLists.txt +28 -0
- data/ext/rj_schema/rapidjson/test/perftest/misctest.cpp +974 -0
- data/ext/rj_schema/rapidjson/test/perftest/perftest.cpp +24 -0
- data/ext/rj_schema/rapidjson/test/perftest/perftest.h +185 -0
- data/ext/rj_schema/rapidjson/test/perftest/platformtest.cpp +166 -0
- data/ext/rj_schema/rapidjson/test/perftest/rapidjsontest.cpp +472 -0
- data/ext/rj_schema/rapidjson/test/perftest/schematest.cpp +216 -0
- data/ext/rj_schema/rapidjson/test/unittest/CMakeLists.txt +92 -0
- data/ext/rj_schema/rapidjson/test/unittest/allocatorstest.cpp +102 -0
- data/ext/rj_schema/rapidjson/test/unittest/bigintegertest.cpp +133 -0
- data/ext/rj_schema/rapidjson/test/unittest/cursorstreamwrappertest.cpp +115 -0
- data/ext/rj_schema/rapidjson/test/unittest/documenttest.cpp +672 -0
- data/ext/rj_schema/rapidjson/test/unittest/dtoatest.cpp +98 -0
- data/ext/rj_schema/rapidjson/test/unittest/encodedstreamtest.cpp +313 -0
- data/ext/rj_schema/rapidjson/test/unittest/encodingstest.cpp +451 -0
- data/ext/rj_schema/rapidjson/test/unittest/filestreamtest.cpp +112 -0
- data/ext/rj_schema/rapidjson/test/unittest/fwdtest.cpp +230 -0
- data/ext/rj_schema/rapidjson/test/unittest/istreamwrappertest.cpp +181 -0
- data/ext/rj_schema/rapidjson/test/unittest/itoatest.cpp +160 -0
- data/ext/rj_schema/rapidjson/test/unittest/jsoncheckertest.cpp +143 -0
- data/ext/rj_schema/rapidjson/test/unittest/namespacetest.cpp +70 -0
- data/ext/rj_schema/rapidjson/test/unittest/ostreamwrappertest.cpp +92 -0
- data/ext/rj_schema/rapidjson/test/unittest/pointertest.cpp +1529 -0
- data/ext/rj_schema/rapidjson/test/unittest/prettywritertest.cpp +344 -0
- data/ext/rj_schema/rapidjson/test/unittest/readertest.cpp +1895 -0
- data/ext/rj_schema/rapidjson/test/unittest/regextest.cpp +638 -0
- data/ext/rj_schema/rapidjson/test/unittest/schematest.cpp +2009 -0
- data/ext/rj_schema/rapidjson/test/unittest/simdtest.cpp +219 -0
- data/ext/rj_schema/rapidjson/test/unittest/strfunctest.cpp +30 -0
- data/ext/rj_schema/rapidjson/test/unittest/stringbuffertest.cpp +192 -0
- data/ext/rj_schema/rapidjson/test/unittest/strtodtest.cpp +132 -0
- data/ext/rj_schema/rapidjson/test/unittest/unittest.cpp +51 -0
- data/ext/rj_schema/rapidjson/test/unittest/unittest.h +140 -0
- data/ext/rj_schema/rapidjson/test/unittest/valuetest.cpp +1829 -0
- data/ext/rj_schema/rapidjson/test/unittest/writertest.cpp +598 -0
- data/ext/rj_schema/rapidjson/test/valgrind.supp +17 -0
- data/ext/rj_schema/rapidjson/travis-doxygen.sh +121 -0
- data/ext/rj_schema/rj_schema.cpp +136 -0
- data/lib/rj_schema.rb +7 -0
- metadata +371 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// Reading a message JSON with Reader (SAX-style API).
|
|
2
|
+
// The JSON should be an object with key-string pairs.
|
|
3
|
+
|
|
4
|
+
#include "rapidjson/reader.h"
|
|
5
|
+
#include "rapidjson/error/en.h"
|
|
6
|
+
#include <iostream>
|
|
7
|
+
#include <string>
|
|
8
|
+
#include <map>
|
|
9
|
+
|
|
10
|
+
using namespace std;
|
|
11
|
+
using namespace rapidjson;
|
|
12
|
+
|
|
13
|
+
typedef map<string, string> MessageMap;
|
|
14
|
+
|
|
15
|
+
#if defined(__GNUC__)
|
|
16
|
+
RAPIDJSON_DIAG_PUSH
|
|
17
|
+
RAPIDJSON_DIAG_OFF(effc++)
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
#ifdef __clang__
|
|
21
|
+
RAPIDJSON_DIAG_PUSH
|
|
22
|
+
RAPIDJSON_DIAG_OFF(switch-enum)
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
struct MessageHandler
|
|
26
|
+
: public BaseReaderHandler<UTF8<>, MessageHandler> {
|
|
27
|
+
MessageHandler() : messages_(), state_(kExpectObjectStart), name_() {}
|
|
28
|
+
|
|
29
|
+
bool StartObject() {
|
|
30
|
+
switch (state_) {
|
|
31
|
+
case kExpectObjectStart:
|
|
32
|
+
state_ = kExpectNameOrObjectEnd;
|
|
33
|
+
return true;
|
|
34
|
+
default:
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
bool String(const char* str, SizeType length, bool) {
|
|
40
|
+
switch (state_) {
|
|
41
|
+
case kExpectNameOrObjectEnd:
|
|
42
|
+
name_ = string(str, length);
|
|
43
|
+
state_ = kExpectValue;
|
|
44
|
+
return true;
|
|
45
|
+
case kExpectValue:
|
|
46
|
+
messages_.insert(MessageMap::value_type(name_, string(str, length)));
|
|
47
|
+
state_ = kExpectNameOrObjectEnd;
|
|
48
|
+
return true;
|
|
49
|
+
default:
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
bool EndObject(SizeType) { return state_ == kExpectNameOrObjectEnd; }
|
|
55
|
+
|
|
56
|
+
bool Default() { return false; } // All other events are invalid.
|
|
57
|
+
|
|
58
|
+
MessageMap messages_;
|
|
59
|
+
enum State {
|
|
60
|
+
kExpectObjectStart,
|
|
61
|
+
kExpectNameOrObjectEnd,
|
|
62
|
+
kExpectValue
|
|
63
|
+
}state_;
|
|
64
|
+
std::string name_;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
#if defined(__GNUC__)
|
|
68
|
+
RAPIDJSON_DIAG_POP
|
|
69
|
+
#endif
|
|
70
|
+
|
|
71
|
+
#ifdef __clang__
|
|
72
|
+
RAPIDJSON_DIAG_POP
|
|
73
|
+
#endif
|
|
74
|
+
|
|
75
|
+
static void ParseMessages(const char* json, MessageMap& messages) {
|
|
76
|
+
Reader reader;
|
|
77
|
+
MessageHandler handler;
|
|
78
|
+
StringStream ss(json);
|
|
79
|
+
if (reader.Parse(ss, handler))
|
|
80
|
+
messages.swap(handler.messages_); // Only change it if success.
|
|
81
|
+
else {
|
|
82
|
+
ParseErrorCode e = reader.GetParseErrorCode();
|
|
83
|
+
size_t o = reader.GetErrorOffset();
|
|
84
|
+
cout << "Error: " << GetParseError_En(e) << endl;;
|
|
85
|
+
cout << " at offset " << o << " near '" << string(json).substr(o, 10) << "...'" << endl;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
int main() {
|
|
90
|
+
MessageMap messages;
|
|
91
|
+
|
|
92
|
+
const char* json1 = "{ \"greeting\" : \"Hello!\", \"farewell\" : \"bye-bye!\" }";
|
|
93
|
+
cout << json1 << endl;
|
|
94
|
+
ParseMessages(json1, messages);
|
|
95
|
+
|
|
96
|
+
for (MessageMap::const_iterator itr = messages.begin(); itr != messages.end(); ++itr)
|
|
97
|
+
cout << itr->first << ": " << itr->second << endl;
|
|
98
|
+
|
|
99
|
+
cout << endl << "Parse a JSON with invalid schema." << endl;
|
|
100
|
+
const char* json2 = "{ \"greeting\" : \"Hello!\", \"farewell\" : \"bye-bye!\", \"foo\" : {} }";
|
|
101
|
+
cout << json2 << endl;
|
|
102
|
+
ParseMessages(json2, messages);
|
|
103
|
+
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// Example of parsing JSON to document by parts.
|
|
2
|
+
|
|
3
|
+
// Using C++11 threads
|
|
4
|
+
// Temporarily disable for clang (older version) due to incompatibility with libstdc++
|
|
5
|
+
#if (__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1700)) && !defined(__clang__)
|
|
6
|
+
|
|
7
|
+
#include "rapidjson/document.h"
|
|
8
|
+
#include "rapidjson/error/en.h"
|
|
9
|
+
#include "rapidjson/writer.h"
|
|
10
|
+
#include "rapidjson/ostreamwrapper.h"
|
|
11
|
+
#include <condition_variable>
|
|
12
|
+
#include <iostream>
|
|
13
|
+
#include <mutex>
|
|
14
|
+
#include <thread>
|
|
15
|
+
|
|
16
|
+
using namespace rapidjson;
|
|
17
|
+
|
|
18
|
+
template<unsigned parseFlags = kParseDefaultFlags>
|
|
19
|
+
class AsyncDocumentParser {
|
|
20
|
+
public:
|
|
21
|
+
AsyncDocumentParser(Document& d)
|
|
22
|
+
: stream_(*this)
|
|
23
|
+
, d_(d)
|
|
24
|
+
, parseThread_()
|
|
25
|
+
, mutex_()
|
|
26
|
+
, notEmpty_()
|
|
27
|
+
, finish_()
|
|
28
|
+
, completed_()
|
|
29
|
+
{
|
|
30
|
+
// Create and execute thread after all member variables are initialized.
|
|
31
|
+
parseThread_ = std::thread(&AsyncDocumentParser::Parse, this);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
~AsyncDocumentParser() {
|
|
35
|
+
if (!parseThread_.joinable())
|
|
36
|
+
return;
|
|
37
|
+
|
|
38
|
+
{
|
|
39
|
+
std::unique_lock<std::mutex> lock(mutex_);
|
|
40
|
+
|
|
41
|
+
// Wait until the buffer is read up (or parsing is completed)
|
|
42
|
+
while (!stream_.Empty() && !completed_)
|
|
43
|
+
finish_.wait(lock);
|
|
44
|
+
|
|
45
|
+
// Automatically append '\0' as the terminator in the stream.
|
|
46
|
+
static const char terminator[] = "";
|
|
47
|
+
stream_.src_ = terminator;
|
|
48
|
+
stream_.end_ = terminator + 1;
|
|
49
|
+
notEmpty_.notify_one(); // unblock the AsyncStringStream
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
parseThread_.join();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
void ParsePart(const char* buffer, size_t length) {
|
|
56
|
+
std::unique_lock<std::mutex> lock(mutex_);
|
|
57
|
+
|
|
58
|
+
// Wait until the buffer is read up (or parsing is completed)
|
|
59
|
+
while (!stream_.Empty() && !completed_)
|
|
60
|
+
finish_.wait(lock);
|
|
61
|
+
|
|
62
|
+
// Stop further parsing if the parsing process is completed.
|
|
63
|
+
if (completed_)
|
|
64
|
+
return;
|
|
65
|
+
|
|
66
|
+
// Set the buffer to stream and unblock the AsyncStringStream
|
|
67
|
+
stream_.src_ = buffer;
|
|
68
|
+
stream_.end_ = buffer + length;
|
|
69
|
+
notEmpty_.notify_one();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
private:
|
|
73
|
+
void Parse() {
|
|
74
|
+
d_.ParseStream<parseFlags>(stream_);
|
|
75
|
+
|
|
76
|
+
// The stream may not be fully read, notify finish anyway to unblock ParsePart()
|
|
77
|
+
std::unique_lock<std::mutex> lock(mutex_);
|
|
78
|
+
completed_ = true; // Parsing process is completed
|
|
79
|
+
finish_.notify_one(); // Unblock ParsePart() or destructor if they are waiting.
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
struct AsyncStringStream {
|
|
83
|
+
typedef char Ch;
|
|
84
|
+
|
|
85
|
+
AsyncStringStream(AsyncDocumentParser& parser) : parser_(parser), src_(), end_(), count_() {}
|
|
86
|
+
|
|
87
|
+
char Peek() const {
|
|
88
|
+
std::unique_lock<std::mutex> lock(parser_.mutex_);
|
|
89
|
+
|
|
90
|
+
// If nothing in stream, block to wait.
|
|
91
|
+
while (Empty())
|
|
92
|
+
parser_.notEmpty_.wait(lock);
|
|
93
|
+
|
|
94
|
+
return *src_;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
char Take() {
|
|
98
|
+
std::unique_lock<std::mutex> lock(parser_.mutex_);
|
|
99
|
+
|
|
100
|
+
// If nothing in stream, block to wait.
|
|
101
|
+
while (Empty())
|
|
102
|
+
parser_.notEmpty_.wait(lock);
|
|
103
|
+
|
|
104
|
+
count_++;
|
|
105
|
+
char c = *src_++;
|
|
106
|
+
|
|
107
|
+
// If all stream is read up, notify that the stream is finish.
|
|
108
|
+
if (Empty())
|
|
109
|
+
parser_.finish_.notify_one();
|
|
110
|
+
|
|
111
|
+
return c;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
size_t Tell() const { return count_; }
|
|
115
|
+
|
|
116
|
+
// Not implemented
|
|
117
|
+
char* PutBegin() { return 0; }
|
|
118
|
+
void Put(char) {}
|
|
119
|
+
void Flush() {}
|
|
120
|
+
size_t PutEnd(char*) { return 0; }
|
|
121
|
+
|
|
122
|
+
bool Empty() const { return src_ == end_; }
|
|
123
|
+
|
|
124
|
+
AsyncDocumentParser& parser_;
|
|
125
|
+
const char* src_; //!< Current read position.
|
|
126
|
+
const char* end_; //!< End of buffer
|
|
127
|
+
size_t count_; //!< Number of characters taken so far.
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
AsyncStringStream stream_;
|
|
131
|
+
Document& d_;
|
|
132
|
+
std::thread parseThread_;
|
|
133
|
+
std::mutex mutex_;
|
|
134
|
+
std::condition_variable notEmpty_;
|
|
135
|
+
std::condition_variable finish_;
|
|
136
|
+
bool completed_;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
int main() {
|
|
140
|
+
Document d;
|
|
141
|
+
|
|
142
|
+
{
|
|
143
|
+
AsyncDocumentParser<> parser(d);
|
|
144
|
+
|
|
145
|
+
const char json1[] = " { \"hello\" : \"world\", \"t\" : tr";
|
|
146
|
+
//const char json1[] = " { \"hello\" : \"world\", \"t\" : trX"; // Fot test parsing error
|
|
147
|
+
const char json2[] = "ue, \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.14";
|
|
148
|
+
const char json3[] = "16, \"a\":[1, 2, 3, 4] } ";
|
|
149
|
+
|
|
150
|
+
parser.ParsePart(json1, sizeof(json1) - 1);
|
|
151
|
+
parser.ParsePart(json2, sizeof(json2) - 1);
|
|
152
|
+
parser.ParsePart(json3, sizeof(json3) - 1);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (d.HasParseError()) {
|
|
156
|
+
std::cout << "Error at offset " << d.GetErrorOffset() << ": " << GetParseError_En(d.GetParseError()) << std::endl;
|
|
157
|
+
return EXIT_FAILURE;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Stringify the JSON to cout
|
|
161
|
+
OStreamWrapper os(std::cout);
|
|
162
|
+
Writer<OStreamWrapper> writer(os);
|
|
163
|
+
d.Accept(writer);
|
|
164
|
+
std::cout << std::endl;
|
|
165
|
+
|
|
166
|
+
return EXIT_SUCCESS;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
#else // Not supporting C++11
|
|
170
|
+
|
|
171
|
+
#include <iostream>
|
|
172
|
+
int main() {
|
|
173
|
+
std::cout << "This example requires C++11 compiler" << std::endl;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
#endif
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// JSON pretty formatting example
|
|
2
|
+
// This example can only handle UTF-8. For handling other encodings, see prettyauto example.
|
|
3
|
+
|
|
4
|
+
#include "rapidjson/reader.h"
|
|
5
|
+
#include "rapidjson/prettywriter.h"
|
|
6
|
+
#include "rapidjson/filereadstream.h"
|
|
7
|
+
#include "rapidjson/filewritestream.h"
|
|
8
|
+
#include "rapidjson/error/en.h"
|
|
9
|
+
|
|
10
|
+
using namespace rapidjson;
|
|
11
|
+
|
|
12
|
+
int main(int, char*[]) {
|
|
13
|
+
// Prepare reader and input stream.
|
|
14
|
+
Reader reader;
|
|
15
|
+
char readBuffer[65536];
|
|
16
|
+
FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
|
|
17
|
+
|
|
18
|
+
// Prepare writer and output stream.
|
|
19
|
+
char writeBuffer[65536];
|
|
20
|
+
FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
|
|
21
|
+
PrettyWriter<FileWriteStream> writer(os);
|
|
22
|
+
|
|
23
|
+
// JSON reader parse from the input stream and let writer generate the output.
|
|
24
|
+
if (!reader.Parse<kParseValidateEncodingFlag>(is, writer)) {
|
|
25
|
+
fprintf(stderr, "\nError(%u): %s\n", static_cast<unsigned>(reader.GetErrorOffset()), GetParseError_En(reader.GetParseErrorCode()));
|
|
26
|
+
return 1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// JSON pretty formatting example
|
|
2
|
+
// This example can handle UTF-8/UTF-16LE/UTF-16BE/UTF-32LE/UTF-32BE.
|
|
3
|
+
// The input firstly convert to UTF8, and then write to the original encoding with pretty formatting.
|
|
4
|
+
|
|
5
|
+
#include "rapidjson/reader.h"
|
|
6
|
+
#include "rapidjson/prettywriter.h"
|
|
7
|
+
#include "rapidjson/filereadstream.h"
|
|
8
|
+
#include "rapidjson/filewritestream.h"
|
|
9
|
+
#include "rapidjson/encodedstream.h" // NEW
|
|
10
|
+
#include "rapidjson/error/en.h"
|
|
11
|
+
#ifdef _WIN32
|
|
12
|
+
#include <fcntl.h>
|
|
13
|
+
#include <io.h>
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
using namespace rapidjson;
|
|
17
|
+
|
|
18
|
+
int main(int, char*[]) {
|
|
19
|
+
#ifdef _WIN32
|
|
20
|
+
// Prevent Windows converting between CR+LF and LF
|
|
21
|
+
_setmode(_fileno(stdin), _O_BINARY); // NEW
|
|
22
|
+
_setmode(_fileno(stdout), _O_BINARY); // NEW
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
// Prepare reader and input stream.
|
|
26
|
+
//Reader reader;
|
|
27
|
+
GenericReader<AutoUTF<unsigned>, UTF8<> > reader; // CHANGED
|
|
28
|
+
char readBuffer[65536];
|
|
29
|
+
FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
|
|
30
|
+
AutoUTFInputStream<unsigned, FileReadStream> eis(is); // NEW
|
|
31
|
+
|
|
32
|
+
// Prepare writer and output stream.
|
|
33
|
+
char writeBuffer[65536];
|
|
34
|
+
FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
|
|
35
|
+
|
|
36
|
+
#if 1
|
|
37
|
+
// Use the same Encoding of the input. Also use BOM according to input.
|
|
38
|
+
typedef AutoUTFOutputStream<unsigned, FileWriteStream> OutputStream; // NEW
|
|
39
|
+
OutputStream eos(os, eis.GetType(), eis.HasBOM()); // NEW
|
|
40
|
+
PrettyWriter<OutputStream, UTF8<>, AutoUTF<unsigned> > writer(eos); // CHANGED
|
|
41
|
+
#else
|
|
42
|
+
// You may also use static bound encoding type, such as output to UTF-16LE with BOM
|
|
43
|
+
typedef EncodedOutputStream<UTF16LE<>,FileWriteStream> OutputStream; // NEW
|
|
44
|
+
OutputStream eos(os, true); // NEW
|
|
45
|
+
PrettyWriter<OutputStream, UTF8<>, UTF16LE<> > writer(eos); // CHANGED
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
// JSON reader parse from the input stream and let writer generate the output.
|
|
49
|
+
//if (!reader.Parse<kParseValidateEncodingFlag>(is, writer)) {
|
|
50
|
+
if (!reader.Parse<kParseValidateEncodingFlag>(eis, writer)) { // CHANGED
|
|
51
|
+
fprintf(stderr, "\nError(%u): %s\n", static_cast<unsigned>(reader.GetErrorOffset()), GetParseError_En(reader.GetParseErrorCode()));
|
|
52
|
+
return 1;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Schema Validator example
|
|
2
|
+
|
|
3
|
+
// The example validates JSON text from stdin with a JSON schema specified in the argument.
|
|
4
|
+
|
|
5
|
+
#include "rapidjson/error/en.h"
|
|
6
|
+
#include "rapidjson/filereadstream.h"
|
|
7
|
+
#include "rapidjson/schema.h"
|
|
8
|
+
#include "rapidjson/stringbuffer.h"
|
|
9
|
+
#include "rapidjson/prettywriter.h"
|
|
10
|
+
|
|
11
|
+
using namespace rapidjson;
|
|
12
|
+
|
|
13
|
+
int main(int argc, char *argv[]) {
|
|
14
|
+
if (argc != 2) {
|
|
15
|
+
fprintf(stderr, "Usage: schemavalidator schema.json < input.json\n");
|
|
16
|
+
return EXIT_FAILURE;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Read a JSON schema from file into Document
|
|
20
|
+
Document d;
|
|
21
|
+
char buffer[4096];
|
|
22
|
+
|
|
23
|
+
{
|
|
24
|
+
FILE *fp = fopen(argv[1], "r");
|
|
25
|
+
if (!fp) {
|
|
26
|
+
printf("Schema file '%s' not found\n", argv[1]);
|
|
27
|
+
return -1;
|
|
28
|
+
}
|
|
29
|
+
FileReadStream fs(fp, buffer, sizeof(buffer));
|
|
30
|
+
d.ParseStream(fs);
|
|
31
|
+
if (d.HasParseError()) {
|
|
32
|
+
fprintf(stderr, "Schema file '%s' is not a valid JSON\n", argv[1]);
|
|
33
|
+
fprintf(stderr, "Error(offset %u): %s\n",
|
|
34
|
+
static_cast<unsigned>(d.GetErrorOffset()),
|
|
35
|
+
GetParseError_En(d.GetParseError()));
|
|
36
|
+
fclose(fp);
|
|
37
|
+
return EXIT_FAILURE;
|
|
38
|
+
}
|
|
39
|
+
fclose(fp);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Then convert the Document into SchemaDocument
|
|
43
|
+
SchemaDocument sd(d);
|
|
44
|
+
|
|
45
|
+
// Use reader to parse the JSON in stdin, and forward SAX events to validator
|
|
46
|
+
SchemaValidator validator(sd);
|
|
47
|
+
Reader reader;
|
|
48
|
+
FileReadStream is(stdin, buffer, sizeof(buffer));
|
|
49
|
+
if (!reader.Parse(is, validator) && reader.GetParseErrorCode() != kParseErrorTermination) {
|
|
50
|
+
// Schema validator error would cause kParseErrorTermination, which will handle it in next step.
|
|
51
|
+
fprintf(stderr, "Input is not a valid JSON\n");
|
|
52
|
+
fprintf(stderr, "Error(offset %u): %s\n",
|
|
53
|
+
static_cast<unsigned>(reader.GetErrorOffset()),
|
|
54
|
+
GetParseError_En(reader.GetParseErrorCode()));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Check the validation result
|
|
58
|
+
if (validator.IsValid()) {
|
|
59
|
+
printf("Input JSON is valid.\n");
|
|
60
|
+
return EXIT_SUCCESS;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
printf("Input JSON is invalid.\n");
|
|
64
|
+
StringBuffer sb;
|
|
65
|
+
validator.GetInvalidSchemaPointer().StringifyUriFragment(sb);
|
|
66
|
+
fprintf(stderr, "Invalid schema: %s\n", sb.GetString());
|
|
67
|
+
fprintf(stderr, "Invalid keyword: %s\n", validator.GetInvalidSchemaKeyword());
|
|
68
|
+
sb.Clear();
|
|
69
|
+
validator.GetInvalidDocumentPointer().StringifyUriFragment(sb);
|
|
70
|
+
fprintf(stderr, "Invalid document: %s\n", sb.GetString());
|
|
71
|
+
// Detailed violation report is available as a JSON value
|
|
72
|
+
sb.Clear();
|
|
73
|
+
PrettyWriter<StringBuffer> w(sb);
|
|
74
|
+
validator.GetError().Accept(w);
|
|
75
|
+
fprintf(stderr, "Error report:\n%s\n", sb.GetString());
|
|
76
|
+
return EXIT_FAILURE;
|
|
77
|
+
}
|
|
78
|
+
}
|