#[cfg(feature = "derive")]
fn main() {
use gilt::derives::Columns;
use gilt::prelude::*;
let mut console = Console::builder()
.width(100)
.force_terminal(true)
.no_color(false)
.build();
console.rule(Some("1. Basic derive — fields as columns of cards"));
#[derive(Columns)]
struct Language {
name: String,
paradigm: String,
year: u32,
}
let langs = vec![
Language {
name: "Rust".into(),
paradigm: "Systems".into(),
year: 2010,
},
Language {
name: "Haskell".into(),
paradigm: "Functional".into(),
year: 1990,
},
Language {
name: "Python".into(),
paradigm: "Multi-paradigm".into(),
year: 1991,
},
Language {
name: "Go".into(),
paradigm: "Concurrent".into(),
year: 2009,
},
Language {
name: "Zig".into(),
paradigm: "Systems".into(),
year: 2016,
},
Language {
name: "Elixir".into(),
paradigm: "Functional".into(),
year: 2011,
},
];
console.print(&Language::to_columns(&langs));
console.rule(Some("2. Title, equal columns, and padding"));
#[derive(Columns)]
#[columns(title = "Cloud Regions", equal, expand, padding = 2)]
struct Region {
#[field(label = "Region", style = "bold cyan")]
name: String,
#[field(label = "AZs")]
availability_zones: u32,
#[field(label = "Status", style = "green")]
status: String,
}
let regions = vec![
Region {
name: "us-east-1".into(),
availability_zones: 6,
status: "Healthy".into(),
},
Region {
name: "eu-west-1".into(),
availability_zones: 3,
status: "Healthy".into(),
},
Region {
name: "ap-south-1".into(),
availability_zones: 3,
status: "Degraded".into(),
},
Region {
name: "us-west-2".into(),
availability_zones: 4,
status: "Healthy".into(),
},
];
console.print(&Region::to_columns(®ions));
console.rule(Some("3. Styled fields and #[field(skip)]"));
#[derive(Columns)]
#[columns(column_count = 3, padding = 1)]
struct Dependency {
#[field(label = "Crate", style = "bold yellow")]
name: String,
#[field(label = "Version", style = "dim")]
version: String,
#[field(label = "Features")]
features: String,
#[field(skip)]
#[allow(dead_code)]
checksum: String,
}
let deps = vec![
Dependency {
name: "serde".into(),
version: "1.0.210".into(),
features: "derive, std".into(),
checksum: "abc123".into(),
},
Dependency {
name: "tokio".into(),
version: "1.40.0".into(),
features: "full".into(),
checksum: "def456".into(),
},
Dependency {
name: "regex".into(),
version: "1.10.6".into(),
features: "default".into(),
checksum: "ghi789".into(),
},
Dependency {
name: "clap".into(),
version: "4.5.17".into(),
features: "derive, env".into(),
checksum: "jkl012".into(),
},
Dependency {
name: "tracing".into(),
version: "0.1.40".into(),
features: "log".into(),
checksum: "mno345".into(),
},
Dependency {
name: "anyhow".into(),
version: "1.0.89".into(),
features: "default".into(),
checksum: "pqr678".into(),
},
];
console.print(&Dependency::to_columns(&deps));
console.rule(Some("4. Team roster — practical use case"));
#[derive(Columns)]
#[columns(title = "Engineering Team", equal, expand, padding = 2)]
struct TeamMember {
#[field(label = "Name", style = "bold")]
name: String,
#[field(label = "Role", style = "cyan")]
role: String,
#[field(label = "Squad")]
squad: String,
#[field(label = "Location", style = "dim")]
location: String,
#[field(skip)]
#[allow(dead_code)]
employee_id: u64,
}
let team = vec![
TeamMember {
name: "Alice Chen".into(),
role: "Staff Engineer".into(),
squad: "Platform".into(),
location: "San Francisco".into(),
employee_id: 1001,
},
TeamMember {
name: "Bob Martinez".into(),
role: "Senior Engineer".into(),
squad: "Backend".into(),
location: "Austin".into(),
employee_id: 1002,
},
TeamMember {
name: "Carol Kim".into(),
role: "Tech Lead".into(),
squad: "Frontend".into(),
location: "New York".into(),
employee_id: 1003,
},
TeamMember {
name: "David Singh".into(),
role: "Engineer".into(),
squad: "Platform".into(),
location: "London".into(),
employee_id: 1004,
},
TeamMember {
name: "Eva Novak".into(),
role: "Senior Engineer".into(),
squad: "Data".into(),
location: "Berlin".into(),
employee_id: 1005,
},
TeamMember {
name: "Frank Osei".into(),
role: "Engineer".into(),
squad: "Backend".into(),
location: "Toronto".into(),
employee_id: 1006,
},
];
console.print(&TeamMember::to_columns(&team));
console.rule(Some("5. Single card via to_card()"));
let alice = &team[0];
console.print(&alice.to_card());
}
#[cfg(not(feature = "derive"))]
fn main() {
eprintln!(
"This example requires the 'derive' feature: cargo run --example derive_columns --features derive"
);
}