Fix dependencies to allow pattern-matching plugin to be used on core Syndicate protocols
This commit is contained in:
parent
6e5428d1d3
commit
9f847469f2
|
@ -1882,6 +1882,7 @@ dependencies = [
|
|||
"parking_lot 0.11.2",
|
||||
"preserves",
|
||||
"preserves-schema",
|
||||
"syndicate-schema-plugin",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
"tracing",
|
||||
|
@ -1905,8 +1906,9 @@ dependencies = [
|
|||
name = "syndicate-schema-plugin"
|
||||
version = "0.9.0"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"preserves",
|
||||
"preserves-schema",
|
||||
"syndicate",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
@ -2,9 +2,9 @@ cargo-features = ["strip"]
|
|||
|
||||
[workspace]
|
||||
members = [
|
||||
"syndicate-schema-plugin",
|
||||
"syndicate",
|
||||
"syndicate-macros",
|
||||
"syndicate-schema-plugin",
|
||||
"syndicate-server",
|
||||
"syndicate-tools",
|
||||
]
|
||||
|
|
|
@ -11,9 +11,13 @@ license = "Apache-2.0"
|
|||
|
||||
[lib]
|
||||
|
||||
[dependencies]
|
||||
[build-dependencies]
|
||||
preserves-schema = "5.995"
|
||||
syndicate = { path = "../syndicate", version = "0.40.0"}
|
||||
|
||||
[dependencies]
|
||||
preserves = "4.995"
|
||||
preserves-schema = "5.995"
|
||||
lazy_static = "1.4"
|
||||
|
||||
[package.metadata.workspaces]
|
||||
independent = true
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
use preserves_schema::compiler::*;
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
let buildroot = std::path::PathBuf::from(std::env::var_os("OUT_DIR").unwrap());
|
||||
|
||||
let mut gen_dir = buildroot.clone();
|
||||
gen_dir.push("src/schemas");
|
||||
|
||||
let mut c = CompilerConfig::new("crate::schemas".to_owned());
|
||||
c.add_external_module(ExternalModule::new(vec!["EntityRef".to_owned()], "crate::placeholder"));
|
||||
|
||||
let inputs = expand_inputs(&vec!["../syndicate/protocols/schema-bundle.bin".to_owned()])?;
|
||||
c.load_schemas_and_bundles(&inputs, &vec![])?;
|
||||
compile(&c, &mut CodeCollector::files(gen_dir))
|
||||
}
|
|
@ -1,3 +1,25 @@
|
|||
mod pattern_plugin;
|
||||
use std::sync::Arc;
|
||||
use preserves::value::ArcValue;
|
||||
use preserves::value::Domain;
|
||||
|
||||
mod schemas {
|
||||
//! Auto-generated codecs for [Syndicate protocol
|
||||
//! schemas](https://git.syndicate-lang.org/syndicate-lang/syndicate-protocols/src/branch/main/schemas).
|
||||
include!(concat!(env!("OUT_DIR"), "/src/schemas/mod.rs"));
|
||||
}
|
||||
|
||||
mod placeholder {
|
||||
pub type Cap = super::Cap;
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Hash, Ord, Eq, PartialOrd, PartialEq)]
|
||||
pub enum Cap {}
|
||||
impl Domain for Cap {}
|
||||
|
||||
preserves_schema::define_language!(language(): Language<ArcValue<Arc<Cap>>> {
|
||||
syndicate: schemas::Language,
|
||||
});
|
||||
|
||||
mod pattern;
|
||||
mod pattern_plugin;
|
||||
pub use pattern_plugin::PatternPlugin;
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
use crate::schemas::dataspace_patterns::*;
|
||||
|
||||
use preserves::value::NestedValue;
|
||||
use preserves::value::Value;
|
||||
|
||||
pub fn lift_literal<N: NestedValue>(v: &N) -> Pattern<N> {
|
||||
match v.value() {
|
||||
Value::Boolean(b) => Pattern::Lit { value: Box::new(AnyAtom::Bool(*b)) },
|
||||
Value::Double(d) => Pattern::Lit { value: Box::new(AnyAtom::Double(*d)) },
|
||||
Value::SignedInteger(i) => Pattern::Lit { value: Box::new(AnyAtom::Int(i.clone())) },
|
||||
Value::String(s) => Pattern::Lit { value: Box::new(AnyAtom::String(s.clone())) },
|
||||
Value::ByteString(bs) => Pattern::Lit { value: Box::new(AnyAtom::Bytes(bs.clone())) },
|
||||
Value::Symbol(s) => Pattern::Lit { value: Box::new(AnyAtom::Symbol(s.clone())) },
|
||||
Value::Record(r) => Pattern::Group {
|
||||
type_: Box::new(GroupType::Rec { label: r.label().clone() }),
|
||||
entries: r.fields().iter().enumerate()
|
||||
.map(|(i, v)| (N::new(i), lift_literal(v)))
|
||||
.collect(),
|
||||
},
|
||||
Value::Sequence(items) => Pattern::Group {
|
||||
type_: Box::new(GroupType::Arr),
|
||||
entries: items.iter().enumerate()
|
||||
.map(|(i, v)| (N::new(i), lift_literal(v)))
|
||||
.collect(),
|
||||
},
|
||||
Value::Set(_members) => panic!("Cannot express literal set in pattern"),
|
||||
Value::Dictionary(entries) => Pattern::Group {
|
||||
type_: Box::new(GroupType::Dict),
|
||||
entries: entries.iter()
|
||||
.map(|(k, v)| (k.clone(), lift_literal(v)))
|
||||
.collect(),
|
||||
},
|
||||
Value::Embedded(e) => Pattern::Lit { value: Box::new(AnyAtom::Embedded(e.clone())) },
|
||||
}
|
||||
}
|
|
@ -7,16 +7,27 @@ use preserves_schema::gen::schema::*;
|
|||
use preserves_schema::syntax::block::escape_string;
|
||||
use preserves_schema::syntax::block::constructors::*;
|
||||
|
||||
use preserves::value::IOValue;
|
||||
use preserves::value::Map;
|
||||
use preserves::value::NestedValue;
|
||||
|
||||
use std::iter::FromIterator;
|
||||
|
||||
use syndicate::pattern::lift_literal;
|
||||
use syndicate::schemas::dataspace_patterns as P;
|
||||
use syndicate::value::IOValue;
|
||||
use syndicate::value::Map;
|
||||
use syndicate::value::NestedValue;
|
||||
use crate::pattern::lift_literal;
|
||||
use crate::schemas::dataspace_patterns as P;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct PatternPlugin;
|
||||
pub struct PatternPlugin {
|
||||
pub syndicate_crate: String,
|
||||
}
|
||||
|
||||
impl PatternPlugin {
|
||||
pub fn new() -> Self {
|
||||
PatternPlugin {
|
||||
syndicate_crate: "syndicate".to_string(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type WalkState<'a, 'm, 'b> =
|
||||
preserves_schema::compiler::cycles::WalkState<&'a ModuleContext<'m, 'b>>;
|
||||
|
@ -35,7 +46,7 @@ impl Plugin for PatternPlugin {
|
|||
Purpose::Codegen,
|
||||
definition_name,
|
||||
definition);
|
||||
let v = syndicate::language().unparse(&p);
|
||||
let v = crate::language().unparse(&p);
|
||||
let v = preserves_schema::support::preserves::value::TextWriter::encode(
|
||||
&mut preserves_schema::support::preserves::value::NoEmbeddedDomainCodec,
|
||||
&v).unwrap();
|
||||
|
@ -47,14 +58,15 @@ impl Plugin for PatternPlugin {
|
|||
ty.generic_arg(ctxt),
|
||||
" ", codeblock![
|
||||
seq!["#[allow(unused)] pub fn wildcard_dataspace_pattern() ",
|
||||
"-> syndicate::schemas::dataspace_patterns::Pattern ",
|
||||
seq!["-> ", self.syndicate_crate.clone(), "::schemas::dataspace_patterns::Pattern "],
|
||||
codeblock![
|
||||
"use syndicate::schemas::dataspace_patterns::*;",
|
||||
seq!["use ", self.syndicate_crate.clone(), "::schemas::dataspace_patterns::*;"],
|
||||
"use preserves_schema::Codec;",
|
||||
seq!["let _v = syndicate::value::text::from_str(",
|
||||
seq!["let _v = ", self.syndicate_crate.clone(), "::value::text::from_str(",
|
||||
escape_string(&v),
|
||||
", syndicate::value::ViaCodec::new(syndicate::value::NoEmbeddedDomainCodec)).unwrap();"],
|
||||
"syndicate::language().parse(&_v).unwrap()"]]]]));
|
||||
", ", self.syndicate_crate.clone(), "::value::ViaCodec::new(",
|
||||
self.syndicate_crate.clone(), "::value::NoEmbeddedDomainCodec)).unwrap();"],
|
||||
seq![self.syndicate_crate.clone(), "::language().parse(&_v).unwrap()"]]]]]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ fn main() -> std::io::Result<()> {
|
|||
gen_dir.push("src/schemas");
|
||||
|
||||
let mut c = CompilerConfig::new("crate::schemas".to_owned());
|
||||
c.plugins.push(Box::new(syndicate_schema_plugin::PatternPlugin));
|
||||
c.plugins.push(Box::new(syndicate_schema_plugin::PatternPlugin::new()));
|
||||
c.add_external_module(ExternalModule::new(vec!["EntityRef".to_owned()], "syndicate::actor"));
|
||||
c.add_external_module(
|
||||
ExternalModule::new(vec!["TransportAddress".to_owned()],
|
||||
|
|
|
@ -14,6 +14,7 @@ vendored-openssl = ["openssl/vendored"]
|
|||
|
||||
[build-dependencies]
|
||||
preserves-schema = "5.995"
|
||||
syndicate-schema-plugin = { path = "../syndicate-schema-plugin", version = "0.9.0"}
|
||||
|
||||
[dependencies]
|
||||
preserves = "4.995"
|
||||
|
|
|
@ -1,25 +1,5 @@
|
|||
use preserves_schema::compiler::*;
|
||||
|
||||
mod syndicate_plugins {
|
||||
use preserves_schema::compiler::*;
|
||||
use preserves_schema::gen::schema::*;
|
||||
// use preserves_schema::syntax::block::constructors::*;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub(super) struct PatternPlugin;
|
||||
|
||||
impl Plugin for PatternPlugin {
|
||||
fn generate_definition(
|
||||
&self,
|
||||
_m: &mut context::ModuleContext,
|
||||
_definition_name: &str,
|
||||
_definition: &Definition,
|
||||
) {
|
||||
// TODO: Emit code for building instances of sturdy.Pattern and sturdy.Template
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
let buildroot = std::path::PathBuf::from(std::env::var_os("OUT_DIR").unwrap());
|
||||
|
||||
|
@ -27,7 +7,9 @@ fn main() -> std::io::Result<()> {
|
|||
gen_dir.push("src/schemas");
|
||||
|
||||
let mut c = CompilerConfig::new("crate::schemas".to_owned());
|
||||
c.plugins.push(Box::new(syndicate_plugins::PatternPlugin));
|
||||
c.plugins.push(Box::new(syndicate_schema_plugin::PatternPlugin {
|
||||
syndicate_crate: "crate".to_string(),
|
||||
}));
|
||||
c.add_external_module(ExternalModule::new(vec!["EntityRef".to_owned()], "crate::actor"));
|
||||
|
||||
let inputs = expand_inputs(&vec!["protocols/schema-bundle.bin".to_owned()])?;
|
||||
|
|
Loading…
Reference in New Issue