Structs in CLIPS

Go’s *structs* are typed collections of fields. They’re useful for grouping data together to form records.

This `person` struct type has `name` and `age` fields.

```rust
struct Person {
    name: String,
    age: i32,
}

new_person constructs a new person struct with the given name.

Rust ensures memory safety through its ownership system, so you can safely return a struct from a function.

fn new_person(name: String) -> Person {
    let p = Person { name, age: 42 };
    p
}

You can create a new struct instance using this syntax.

fn main() {
    println!("{:?}", Person { name: String::from("Bob"), age: 20 });

    println!("{:?}", Person { name: String::from("Alice"), age: 30 });

    println!("{:?}", Person { name: String::from("Fred"), age: 0 });

    println!("{:?}", &Person { name: String::from("Ann"), age: 40 });

    println!("{:?}", new_person(String::from("Jon")));

    let s = Person { name: String::from("Sean"), age: 50 };
    println!("{}", s.name);

    let sp = &s;
    println!("{}", sp.age);

    let mut sp = s;
    sp.age = 51;
    println!("{}", sp.age);

    let dog = struct {
        name: String,
        is_good: bool,
    } {
        name: String::from("Rex"),
        is_good: true,
    };
    println!("{:?}", dog);
}

To run the program, put the code in main.rs and use cargo run.

$ cargo run
Person { name: "Bob", age: 20 }
Person { name: "Alice", age: 30 }
Person { name: "Fred", age: 0 }
Person { name: "Ann", age: 40 }
Person { name: "Jon", age: 42 }
Sean
50
51
{ name: "Rex", is_good: true }

Now that we can run and build basic Rust programs, let’s learn more about the language.