lattice-core 0.1.0

Simple Lattice/Graph Library
Documentation
use lattice_core::{read_basis_from_file, read_unitcell_from_file, Boundary, ExtentVector, Graph};

#[path = "support/mod.rs"]
mod support;

fn main() {
    let args = std::env::args().collect::<Vec<_>>();

    let mut file = support::resolve_lattices_xml().unwrap_or_else(|message| {
        eprintln!("Error: {message}");
        std::process::exit(127);
    });
    let mut basis_name = "square lattice".to_string();
    let mut cell_name = "simple2d".to_string();
    let mut length: usize = 4;

    if args.len() > 1 {
        if args.len() == 4 || args.len() == 5 {
            file = std::path::PathBuf::from(&args[1]);
            basis_name = args[2].clone();
            cell_name = args[3].clone();
            if args.len() == 5 {
                length = args[4].parse::<usize>().unwrap_or_else(|_| {
                    eprintln!("Error: invalid length: {}", args[4]);
                    std::process::exit(127);
                });
            }
        } else {
            eprintln!("Error: {} xmlfile basis cell [length]", args[0]);
            std::process::exit(127);
        }
    }

    let basis = read_basis_from_file(&file, &basis_name).unwrap_or_else(|error| {
        eprintln!("Failed to read basis XML entry '{basis_name}': {error}");
        std::process::exit(127);
    });

    let cell = read_unitcell_from_file(&file, &cell_name).unwrap_or_else(|error| {
        eprintln!("Failed to read unitcell XML entry '{cell_name}': {error}");
        std::process::exit(127);
    });

    let extent = ExtentVector::from_element(cell.dimension(), length as i64);
    let boundary = vec![Boundary::Periodic; cell.dimension()];
    let graph = Graph::from_basis_unitcell_extent(&basis, &cell, &extent, &boundary);

    support::print_graph(&graph);
}