Adding an Artifact Representation

Model Writer

The example below is pretty much the implementation of the atelier_core::io::debug module, it writes the model using the Debug implementation associated with those objects.


#![allow(unused_variables)]
fn main() {
use atelier_core::io::ModelWriter;
use atelier_core::model::Model;
use atelier_core::error::Result as ModelResult;
use std::io::Write;

#[derive(Debug)]
pub struct FooWriter {}

impl Default for FooWriter {
    fn default() -> Self {
        Self {}
    }
}

impl ModelWriter for FooWriter {
    fn write(&mut self, w: &mut impl Write, model: &Model) -> ModelResult<()> {
        todo!()
    }
}
}

Add transform function


#![allow(unused_variables)]
fn main() {
pub fn model_to_foo(source: &Model) -> Result<Foo> {
    todo!()
}
}

#![allow(unused_variables)]
fn main() {
impl ModelWriter for FooWriter {
    fn write(&mut self, w: &mut impl Write, model: &Model) -> ModelResult<()> {
        let foo = model_to_foo(model)?;
        write!(w, "{}", foo)?;
        Ok(())
    }
}
}

Model Reader


#![allow(unused_variables)]
fn main() {
use atelier_core::io::ModelReader;
use atelier_core::model::Model;
use atelier_core::error::Result as ModelResult;
use std::io::Write;

#[derive(Debug)]
pub struct FooReader {}

impl Default for FooReader {
    fn default() -> Self {
        Self {}
    }
}

impl ModelReader for FooReader {
    fn read(&mut self, r: &mut impl Read) -> ModelResult<Model> {
        todo!()
    }
}
}

Add transform function


#![allow(unused_variables)]
fn main() {
pub fn pub fn parse_model(r: &mut impl Read) -> ModelResult<Model> {
    todo!()
}
}

#![allow(unused_variables)]
fn main() {
impl ModelReader for FooReader {
    fn read(&mut self, r: &mut impl Read) -> ModelResult<Model> {
        parse_model(r)
    }
}
}