reda-gds 0.2.0

GDSII file library
Documentation

use std::collections::HashMap;
use std::io::Read;
use std::io::Seek;
use std::path::Path;
use std::sync::Arc;
use std::sync::RwLock;
use derive_builder::Builder;

pub use crate::models::*;
pub use crate::io::*;

#[derive(Clone, Builder)]
#[builder(setter(strip_option))]
pub struct GdsLibrary {
    pub version: i16,
    pub create_date: GdsDateTime,
    pub modify_date: GdsDateTime,
    pub name: String,

    #[builder(default)]
    pub reflibs: Option<[String; 2]>,
    #[builder(default)]
    pub fonts: Option<[String; 4]>,
    #[builder(default)]
    pub attrtable: Option<String>,
    #[builder(default)]
    pub generations: Option<i16>,
    #[builder(default)]
    pub format: Option<GdsFormat>,

    pub usrunits_per_dbunit: f64,
    pub meters_per_dbunit: f64,

    pub structures: HashMap<String, Arc<RwLock<GdsStructure>>>,
}

impl GdsLibrary {
    pub fn load_file<P: AsRef<Path>>(path: P) -> GdsReadResult<Self> {
        let mut reader = GdsReader::open(path)?;
        reader.read()
    }

    pub fn save_gds_file<P: AsRef<Path>>(&self, path: P) -> GdsWriteResult<()> {
        let mut writer = GdsWriter::open(path)?;
        writer.write(self)
    }

    pub fn save_text_file<P: AsRef<Path>>(&self, path: P) -> GdsWriteResult<()> {
        let mut writer = TextWriter::open(path)?;
        writer.write(self)
    }

    pub fn read<R: Read + Seek>(reader: R) -> GdsReadResult<Self> {
        let mut reader = GdsReader::new(reader)?;
        reader.read()
    }
    
    pub fn write_gds<W: std::io::Write>(&self, writer: W) -> GdsWriteResult<()> {
        let mut writer = GdsWriter::new(writer);
        writer.write(self)
    }

    pub fn write_text<W: std::io::Write>(&self, writer: W) -> GdsWriteResult<()> {
        let mut writer = TextWriter::new(writer);
        writer.write(self)
    }
}