visit-rs 0.1.9

A generic visitor pattern library for Rust
Documentation
use visit_rs::*;

struct TypeNameVisitor;

impl Visitor for TypeNameVisitor {
    type Result = &'static str;
}

impl Visit<TypeNameVisitor> for Static<String> {
    fn visit(&self, _visitor: &mut TypeNameVisitor) -> &'static str {
        "String"
    }
}

impl Visit<TypeNameVisitor> for Static<i32> {
    fn visit(&self, _visitor: &mut TypeNameVisitor) -> &'static str {
        "i32"
    }
}

impl Visit<TypeNameVisitor> for Static<bool> {
    fn visit(&self, _visitor: &mut TypeNameVisitor) -> &'static str {
        "bool"
    }
}

#[derive(VisitFields)]
struct MyStruct {
    name: String,
    age: i32,
    active: bool,
}

fn main() {
    let mut visitor = TypeNameVisitor;

    let field_types: Vec<_> = MyStruct::visit_fields_static(&mut visitor).collect();

    println!("Field types:");
    for (i, ty) in field_types.iter().enumerate() {
        println!("  Field {}: {}", i, ty);
    }

    assert_eq!(field_types, vec!["String", "i32", "bool"]);
    println!("\nStatic visitor works!");
}