ruast 0.0.14

A printable & modifiable Rust AST
Documentation
fn main() -> Result<(), Box<dyn std::error::Error>> {
    use ruast::*;

    let mut krate = Crate::new();
    let def = StructDef::empty("Foo")
        .with_field(FieldDef::inherited("foo", Type::from("u32")))
        .with_field(FieldDef::inherited("bar", Type::from("u32")));
    krate.add_item(def);
    let fn_decl = FnDecl::regular(
        vec![Param::ref_self(), Param::ident("x", Type::usize())],
        Some(Type::usize()),
    );
    let add = Lit::int("1").bin_op(BinOpKind::Add, Path::single("x"));
    let body = Block::new(vec![Stmt::Expr(add.into())], None);
    let f = Fn::simple("foo", fn_decl, body);
    let imp = Impl::empty("Foo")
        .with_item(Fn::empty_method("test", Pat::ref_self()))
        .with_item(f);
    krate.add_item(imp);
    println!("{krate}");
    Ok(())
}