linked-data-schema 0.3.1

Generates SHACL from Rust structure
Documentation
mod linked_data_schema_field_visitor;

pub use linked_data_schema_derive::LinkedDataSchema;
pub use linked_data_schema_field_visitor::LinkedDataSchemaFieldVisitor;
use rudof_rdf::rdf_core::Rdf;
use shacl_ast::ShaclSchema;
use shacl_ast::component::Component;

pub mod reexports {
  pub use iri_s;
  pub use prefixmap;
  pub use rudof_rdf;
  pub use shacl_ast;
  pub use shacl_rdf;
  pub use uuid;
}

pub trait LinkedDataSchema {
  fn shacl<RDF: Rdf>() -> ShaclSchema<RDF>;

  fn components() -> Vec<Component>;
}

#[macro_export]
macro_rules! print_linked_data_schema_for {
  ( $x:ty ) => {
    let schema = <$x>::shacl();
    {
      use ::linked_data_schema::reexports::rudof_rdf::rdf_core::RDFFormat::Turtle;
      use ::linked_data_schema::reexports::rudof_rdf::rdf_impl::InMemoryGraph;
      use ::linked_data_schema::reexports::shacl_rdf::ShaclWriter;

      let mut shacl_writer = ShaclWriter::<InMemoryGraph>::default();
      shacl_writer.write(&schema).unwrap();

      let mut cursor = Cursor::new(Vec::new());

      shacl_writer.serialize(&Turtle, &mut cursor).unwrap();

      let content = cursor.into_inner();
      let s = String::from_utf8(content).unwrap();
      println!("{}", s);
    }
  };
}