From: Ian Jackson Date: Sun, 20 Sep 2020 21:16:50 +0000 (+0100) Subject: shapelib: wip, still does not compile X-Git-Tag: otter-0.2.0~923 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=8190fe09d415da7ba0f7af833dba0a3c8f6b3376;p=otter.git shapelib: wip, still does not compile Signed-off-by: Ian Jackson --- diff --git a/src/shapelib.rs b/src/shapelib.rs index 2838e43b..bfc08939 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -25,7 +25,7 @@ pub struct ItemDetails { #[derive(Debug,Clone)] pub struct ItemData { - details: Arc, + d: Arc, group: Arc, } @@ -68,9 +68,8 @@ type IE = InternalError; #[typetag::deserialize(tag="outline")] trait OutlineDefn : Debug + Sync + Send { - type Checked; - fn check(&self, lgi: &GroupData) -> Result; - fn load(&self, checked: &Self::Checked) -> Result,IE>; + fn check(&self, lgi: &GroupData) -> Result<(),LLE>; + fn load(&self, lgi: &GroupData) -> Result,IE>; } #[derive(Error,Debug)] @@ -212,14 +211,14 @@ fn resolve_inherit<'r>(depth: u8, groups: &toml::value::Table, } #[throws(LibraryLoadError)] -fn load_catalogue(dirname: String) -> LibraryContents { +fn load_catalogue(dirname: String) -> Contents { let toml_path = format!("{}.toml", &dirname); let f = File::open(toml_path)?; let mut f = BufReader::new(f); let mut s = String::new(); f.read_to_string(&mut s).unwrap(); let toplevel : toml::Value = s.parse()?; - let mut l = LibraryContents { + let mut l = Contents { items: HashMap::new(), dirname, }; @@ -233,12 +232,12 @@ fn load_catalogue(dirname: String) -> LibraryContents { let resolved = resolve_inherit(INHERIT_DEPTH_LIMIT, &groups, group_name, group_value)?; let resolved = TV::Table(resolved.into_owned()); - let spec : LibraryGroupSpec = resolved.try_into()?; + let spec : GroupDefn = resolved.try_into()?; for fe in spec.files.0 { let item = format!("{}{}{}.usvg", spec.item_prefix, fe.item_spec, spec.item_suffix); - let details = Arc::new(LibraryItemDetails { desc: fe.desc }); - let lp = LibraryItemInfo { info: spec.info.clone(), details }; + let details = Arc::new(ItemDetails { desc: fe.desc }); + let lp = ItemData { info: spec.info.clone(), details }; type H<'e,X,Y> = hash_map::Entry<'e,X,Y>; match l.items.entry(item) { H::Occupied(oe) => throw!(LLE::DuplicateItem( @@ -263,17 +262,15 @@ pub fn load(libname: String, dirname: String) { #[derive(Serialize,Deserialize,Debug)] struct CircleDefn { } -#[typetag::serde(name="Circle")] -impl OutlineSpec for CircleDefn { +#[typetag::deserialize(name="Circle")] +impl OutlineDefn for CircleDefn { #[throws(LibraryLoadError)] - fn check(&self, lgi: &LibraryGroupInfo) { - Self::get_size(lgi)?; - } + fn check(&self, lgd: &GroupData) { Self::get_size(lgd)?; } } -impl Circle { +impl CircleDefn { #[throws(LibraryLoadError)] - fn get_size(lgi: &LibraryGroupInfo) -> Coord { - match lgi.size.as_slice() { + fn get_size(lgd: &GroupData) -> Coord { + match lgd.size.as_slice() { &[c] => c, size => throw!(LLE::WrongNumberOfSizeDimensions { got: size.len(), expected : 1 }), @@ -298,7 +295,7 @@ impl TryFrom for FileList { let r_file_spec = n()?; let desc = Html(n()?); assert!(!n().is_err()); - o.push(FileEntry{ item_spec, r_file_spec, desc }); + o.push(FileData{ item_spec, r_file_spec, desc }); } Ok(FileList(o)) }