Marwes / schemafy

Crate for generating rust types from a json schema

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Failure with vega-lite JSON schema

waywardmonkeys opened this issue · comments

I tried experimentally to create Rust code from the latest Vega Lite JSON schema and it crashed:

thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', /Users/travis/build/rust-lang/rust/src/liballoc/vec.rs:1551:10

The schema file that I used can be found at https://github.com/vega/schema/blob/master/vega-lite/v2.1.2.json

Try running with RUST_BACKTRACE=1 set so we can see where the panic happens.

Here you are!

   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::print
             at libstd/sys_common/backtrace.rs:68
             at libstd/sys_common/backtrace.rs:57
   2: std::panicking::default_hook::{{closure}}
             at libstd/panicking.rs:380
   3: std::panicking::default_hook
             at libstd/panicking.rs:396
   4: std::panicking::begin_panic
             at libstd/panicking.rs:576
   5: std::panicking::begin_panic
             at libstd/panicking.rs:537
   6: std::panicking::try::do_call
             at libstd/panicking.rs:521
   7: std::panicking::try::do_call
             at libstd/panicking.rs:497
   8: core::ptr::drop_in_place
             at libcore/panicking.rs:71
   9: core::ptr::drop_in_place
             at libcore/panicking.rs:58
  10: <alloc::vec::Vec<T> as core::ops::index::Index<usize>>::index
             at /Users/travis/build/rust-lang/rust/src/liballoc/vec.rs:1551
  11: schemafy::Expander::expand_type_
             at /Users/bruce/.cargo/registry/src/github.com-1ecc6299db9ec823/schemafy-0.4.1/src/lib.rs:308
  12: schemafy::Expander::expand_type
             at /Users/bruce/.cargo/registry/src/github.com-1ecc6299db9ec823/schemafy-0.4.1/src/lib.rs:291
  13: schemafy::FieldExpander::expand_fields::{{closure}}
             at /Users/bruce/.cargo/registry/src/github.com-1ecc6299db9ec823/schemafy-0.4.1/src/lib.rs:170
  14: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &'a mut F>::call_once
             at /Users/travis/build/rust-lang/rust/src/libcore/ops/function.rs:271
  15: <core::option::Option<T>>::map
             at /Users/travis/build/rust-lang/rust/src/libcore/option.rs:404
  16: <core::iter::Map<I, F> as core::iter::iterator::Iterator>::next
             at /Users/travis/build/rust-lang/rust/src/libcore/iter/mod.rs:1251
  17: <alloc::vec::Vec<T>>::extend_desugared
             at /Users/travis/build/rust-lang/rust/src/liballoc/vec.rs:1921
  18: <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T, I>>::spec_extend
             at /Users/travis/build/rust-lang/rust/src/liballoc/vec.rs:1818
  19: <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T, I>>::from_iter
             at /Users/travis/build/rust-lang/rust/src/liballoc/vec.rs:1813
  20: <alloc::vec::Vec<T> as core::iter::traits::FromIterator<T>>::from_iter
             at /Users/travis/build/rust-lang/rust/src/liballoc/vec.rs:1713
  21: core::iter::iterator::Iterator::collect
             at /Users/travis/build/rust-lang/rust/src/libcore/iter/iterator.rs:1298
  22: schemafy::FieldExpander::expand_fields
             at /Users/bruce/.cargo/registry/src/github.com-1ecc6299db9ec823/schemafy-0.4.1/src/lib.rs:159
  23: schemafy::Expander::expand_schema
             at /Users/bruce/.cargo/registry/src/github.com-1ecc6299db9ec823/schemafy-0.4.1/src/lib.rs:391
  24: schemafy::Expander::expand_definitions
             at /Users/bruce/.cargo/registry/src/github.com-1ecc6299db9ec823/schemafy-0.4.1/src/lib.rs:366
  25: schemafy::Expander::expand
             at /Users/bruce/.cargo/registry/src/github.com-1ecc6299db9ec823/schemafy-0.4.1/src/lib.rs:464
  26: schemafy::format
             at /Users/bruce/.cargo/registry/src/github.com-1ecc6299db9ec823/schemafy-0.4.1/src/lib.rs:513
  27: schemafy::GenerateBuilder::build::{{closure}}
             at /Users/bruce/.cargo/registry/src/github.com-1ecc6299db9ec823/schemafy-0.4.1/src/lib.rs:520
  28: build_script_build::main
             at ./build.rs:16
  29: std::rt::lang_start::{{closure}}
             at /Users/travis/build/rust-lang/rust/src/libstd/rt.rs:74
  30: std::panicking::try::do_call
             at libstd/rt.rs:59
             at libstd/panicking.rs:479
  31: panic_unwind::dwarf::eh::read_encoded_pointer
             at libpanic_unwind/lib.rs:102
  32: std::sys_common::bytestring::debug_fmt_bytestring
             at libstd/panicking.rs:458
             at libstd/panic.rs:358
             at libstd/rt.rs:58
  33: std::rt::lang_start
             at /Users/travis/build/rust-lang/rust/src/libstd/rt.rs:74
  34: build_script_build::main

Went through and fixed 2-3 more problems as well as I found them. I don't know exactly what quality you were hoping for but at least it compiles now.

If you find any patterns in the schema that compiles poorly then feel free to open an issue (or even better make a PR!) as long as its not something specific only to this schema I am happy to merge common patterns.

Eventually I'd like to make this more customisable but I haven't had any need/time to update this in a while. I need to refactor quite a bit as well to make it easier to modify...

Thanks! I have found a few things that could be improved in the output, but I will see if I can submit PRs instead of issues. :)