tl-build 0.1.0

tl build toolkit.
Documentation
use std::io;
use tl_build::parse_tl_file;
use tl_build::tl::Definition;
use tl_build::{generate_rust_code, Config};

const LAYER: i32 = 0;

fn get_definitions(contents: &str) -> Vec<Definition> {
    parse_tl_file(&contents)
        .into_iter()
        .map(|d| d.unwrap())
        .collect()
}

#[test]
fn generic_functions_use_generic_parameters() -> io::Result<()> {
    let definitions = get_definitions(
        "
        ---functions---
        invokeWithLayer#da9b0d0d {X:Type} layer:int query:!X = X;
    ",
    );
    let mut file = Vec::new();
    generate_rust_code(
        &mut file,
        &definitions,
        LAYER,
        &Config {
            gen_name_for_id: false,
            deserializable_functions: true,
            impl_debug: true,
            impl_from_enum: true,
            impl_from_type: true,
        },
    )?;
    let result = String::from_utf8(file).unwrap();
    eprintln!("{}", result);
    assert!(result.contains("InvokeWithLayer<X: tl_types::RemoteCall>"));
    assert!(result.contains("pub query: X,"));
    assert!(result
        .contains("impl<X: tl_types::RemoteCall> tl_types::Identifiable for InvokeWithLayer<X>"));
    assert!(result
        .contains("impl<X: tl_types::RemoteCall> tl_types::Serializable for InvokeWithLayer<X>"));
    assert!(result
        .contains("impl<X: tl_types::RemoteCall> tl_types::Deserializable for InvokeWithLayer<X>"));
    assert!(result
        .contains("impl<X: tl_types::RemoteCall> tl_types::RemoteCall for InvokeWithLayer<X>"));
    assert!(result.contains("type Return = X::Return;"));
    Ok(())
}