Better idioms
This commit is contained in:
parent
9c4be54be1
commit
5c2d12971d
|
@ -60,9 +60,9 @@ fn main() -> Result<(), Error> {
|
|||
},
|
||||
Err(()) => match Bundle::try_from(&schema) {
|
||||
Ok(Bundle { modules }) => {
|
||||
for (k, v) in modules.0 {
|
||||
for (ModulePath(k), v) in modules.0 {
|
||||
let mut name = prefix.clone();
|
||||
name.extend(k.0);
|
||||
name.extend(k);
|
||||
config.bundle.insert(name, v);
|
||||
}
|
||||
},
|
||||
|
|
|
@ -13,9 +13,8 @@ pub fn gen_definition_parser(m: &mut ModuleContext, n: &str, d: &Definition) {
|
|||
|
||||
match d {
|
||||
Definition::Or { pattern_0, pattern_1, pattern_n } => {
|
||||
let mut ps: Vec<&NamedAlternative> = pattern_n.iter().collect();
|
||||
ps.insert(0, &**pattern_1);
|
||||
ps.insert(0, &**pattern_0);
|
||||
let mut ps = vec![&**pattern_0, &**pattern_1];
|
||||
ps.extend(pattern_n);
|
||||
for NamedAlternative { variant_label: name, pattern: pat } in ps {
|
||||
let fname = seq!["_parse_", names::render_fieldname(n), "_", names::render_fieldname(name)];
|
||||
let ctorname = item(name![names::render_constructor(n), names::render_constructor(name)]);
|
||||
|
@ -34,9 +33,8 @@ pub fn gen_definition_parser(m: &mut ModuleContext, n: &str, d: &Definition) {
|
|||
body.push(item(seq!["Err(())"]));
|
||||
}
|
||||
Definition::And { pattern_0, pattern_1, pattern_n } => {
|
||||
let mut ps: Vec<&NamedPattern> = pattern_n.iter().collect();
|
||||
ps.insert(0, &**pattern_1);
|
||||
ps.insert(0, &**pattern_0);
|
||||
let mut ps = vec![&**pattern_0, &**pattern_1];
|
||||
ps.extend(pattern_n);
|
||||
for e in ps {
|
||||
named_pattern_parser(&mut ctxt, e, "value", None, &mut body);
|
||||
}
|
||||
|
@ -117,15 +115,16 @@ fn simple_pattern_parser(
|
|||
dest
|
||||
},
|
||||
SimplePattern::Atom { atom_kind: k } => {
|
||||
match &**k {
|
||||
AtomKind::Boolean => push_let(body, &dest, item(seq![src.to_owned(), ".value().to_boolean().map_err(|_| ())?"])),
|
||||
AtomKind::Float => push_let(body, &dest, item(seq![src.to_owned(), ".value().to_float().map_err(|_| ())?"])),
|
||||
AtomKind::Double => push_let(body, &dest, item(seq![src.to_owned(), ".value().to_double().map_err(|_| ())?"])),
|
||||
AtomKind::SignedInteger => push_let(body, &dest, item(seq![src.to_owned(), ".value().to_signedinteger().map_err(|_| ())?"])),
|
||||
AtomKind::String => push_let(body, &dest, item(seq![src.to_owned(), ".value().to_string().map_err(|_| ())?"])),
|
||||
AtomKind::ByteString => push_let(body, &dest, item(seq![src.to_owned(), ".value().to_bytestring().map_err(|_| ())?"])),
|
||||
AtomKind::Symbol => push_let(body, &dest, item(seq![src.to_owned(), ".value().to_symbol().map_err(|_| ())?"])),
|
||||
}
|
||||
let converter = match &**k {
|
||||
AtomKind::Boolean => "to_boolean",
|
||||
AtomKind::Float => "to_float",
|
||||
AtomKind::Double => "to_double",
|
||||
AtomKind::SignedInteger => "to_signedinteger",
|
||||
AtomKind::String => "to_string",
|
||||
AtomKind::ByteString => "to_bytestring",
|
||||
AtomKind::Symbol => "to_symbol",
|
||||
};
|
||||
push_let(body, &dest, item(seq![src.to_owned(), ".value().", converter, "().map_err(|_| ())?"]));
|
||||
dest
|
||||
},
|
||||
SimplePattern::Embedded { .. } => {
|
||||
|
|
|
@ -41,9 +41,8 @@ pub fn definition_type(d: &Definition) -> TDefinition {
|
|||
TDefinition::Union(entries)
|
||||
},
|
||||
Definition::And { pattern_0, pattern_1, pattern_n } => {
|
||||
let mut arms: Vec<&NamedPattern> = pattern_n.iter().collect();
|
||||
arms.insert(0, &**pattern_1);
|
||||
arms.insert(0, &**pattern_0);
|
||||
let mut arms = vec![&**pattern_0, &**pattern_1];
|
||||
arms.extend(pattern_n);
|
||||
TDefinition::Simple(record_type(&arms))
|
||||
},
|
||||
Definition::Pattern(p) => TDefinition::Simple(pattern_type(p)),
|
||||
|
|
Loading…
Reference in New Issue