diff --git a/Cargo.lock b/Cargo.lock index 07a10a6..4524a14 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,21 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "addr2line" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "aead" version = "0.5.1" @@ -85,12 +70,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "assert_approx_eq" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c07dab4369547dbe5114677b33fbbf724971019f3818172d59a97a61c774ffd" - [[package]] name = "async-stream" version = "0.3.4" @@ -150,21 +129,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "backtrace" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - [[package]] name = "base64" version = "0.20.0" @@ -177,7 +141,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aaf33151a6429fe9211d1b276eafdf70cdff28b071e76c0b0e1503221ea3744" dependencies = [ - "num-bigint 0.4.3", + "num-bigint", "num-integer", "num-traits", ] @@ -194,16 +158,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bitvec" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" -dependencies = [ - "either", - "radium", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -283,7 +237,7 @@ dependencies = [ "hkdf", "hmac", "percent-encoding", - "rand 0.8.5", + "rand", "sha2", "subtle", "time", @@ -306,7 +260,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core 0.6.4", + "rand_core", "typenum", ] @@ -384,22 +338,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dms-coordinates" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec6b438cc34e673063a715ff761392e195278759fa5d882d6bc6b78e2e30d90d" -dependencies = [ - "geo-types", - "gpx", - "initial_conditions", - "map_3d", - "rust-3d", - "serde", - "serde_derive", - "thiserror", -] - [[package]] name = "either" version = "1.8.1" @@ -436,16 +374,6 @@ dependencies = [ "libc", ] -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "backtrace", - "version_check", -] - [[package]] name = "fastrand" version = "1.9.0" @@ -475,12 +403,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - [[package]] name = "futures" version = "0.3.27" @@ -569,17 +491,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "geo-types" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5f0b3068e1537a4b861ec3734f4aa9c317d537cf0845bf6fb6221973499d26c" -dependencies = [ - "approx", - "num-traits", - "serde", -] - [[package]] name = "geoutils" version = "0.5.1" @@ -607,32 +518,12 @@ dependencies = [ "polyval", ] -[[package]] -name = "gimli" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" - [[package]] name = "glob" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "gpx" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b03599b85866c88fd0125db7ca7a683be1550724918682c736c7893a399dc5e" -dependencies = [ - "assert_approx_eq", - "error-chain", - "geo-types", - "thiserror", - "time", - "xml-rs", -] - [[package]] name = "h2" version = "0.3.16" @@ -778,15 +669,6 @@ dependencies = [ "serde", ] -[[package]] -name = "initial_conditions" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ddf16659f435e5c98d948694a97c33b6660c35adad199ab10362092a45ce921" -dependencies = [ - "num 0.1.42", -] - [[package]] name = "inlinable_string" version = "0.1.15" @@ -886,12 +768,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "map_3d" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fc1b6107fbd06c96e5e481fcf3e6575b873eb84f5b68f1f5706cde0fed42c4" - [[package]] name = "matchers" version = "0.1.0" @@ -919,15 +795,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - [[package]] name = "mio" version = "0.8.6" @@ -980,57 +847,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "num" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" -dependencies = [ - "num-bigint 0.1.44", - "num-complex 0.1.43", - "num-integer", - "num-iter", - "num-rational 0.1.42", - "num-traits", -] - -[[package]] -name = "num" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" -dependencies = [ - "num-bigint 0.2.6", - "num-complex 0.2.4", - "num-integer", - "num-iter", - "num-rational 0.2.4", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" -dependencies = [ - "num-integer", - "num-traits", - "rand 0.4.6", - "rustc-serialize", -] - -[[package]] -name = "num-bigint" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.4.3" @@ -1042,26 +858,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-complex" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" -dependencies = [ - "num-traits", - "rustc-serialize", -] - -[[package]] -name = "num-complex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" -dependencies = [ - "autocfg", - "num-traits", -] - [[package]] name = "num-integer" version = "0.1.45" @@ -1072,41 +868,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" -dependencies = [ - "num-bigint 0.1.44", - "num-integer", - "num-traits", - "rustc-serialize", -] - -[[package]] -name = "num-rational" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" -dependencies = [ - "autocfg", - "num-bigint 0.2.6", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.15" @@ -1114,7 +875,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1127,15 +887,6 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.30.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.17.1" @@ -1232,7 +983,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" dependencies = [ "phf_shared", - "rand 0.8.5", + "rand", ] [[package]] @@ -1340,25 +1091,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "radium" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" - -[[package]] -name = "rand" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -dependencies = [ - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "rdrand", - "winapi", -] - [[package]] name = "rand" version = "0.8.5" @@ -1367,7 +1099,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -1377,24 +1109,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", + "rand_core", ] -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - [[package]] name = "rand_core" version = "0.6.4" @@ -1404,15 +1121,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "redox_syscall" version = "0.2.16" @@ -1490,7 +1198,7 @@ dependencies = [ "num_cpus", "parking_lot", "pin-project-lite", - "rand 0.8.5", + "rand", "ref-cast", "rocket_codegen", "rocket_http", @@ -1550,17 +1258,6 @@ dependencies = [ "uncased", ] -[[package]] -name = "rust-3d" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce1e81ec1eec57188d13fdeb9fcdf961914eb0f57e3b40c723be3b9245de9bb" -dependencies = [ - "bitvec", - "fnv", - "num 0.2.1", -] - [[package]] name = "rust-embed" version = "6.6.0" @@ -1596,18 +1293,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - -[[package]] -name = "rustc-serialize" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" - [[package]] name = "rustix" version = "0.36.10" @@ -1762,10 +1447,8 @@ dependencies = [ name = "spatial-coordinate-systems" version = "0.1.0" dependencies = [ - "dms-coordinates", "nom", "pluscodes", - "thiserror", "utm", ] @@ -2411,12 +2094,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" - [[package]] name = "xpin" version = "0.1.0" @@ -2433,6 +2110,7 @@ dependencies = [ name = "xpin-wasm" version = "0.1.0" dependencies = [ + "spatial-coordinate-systems", "wasm-bindgen", "xpin", ] diff --git a/spatial-coordinate-systems/Cargo.toml b/spatial-coordinate-systems/Cargo.toml index 339a07d..942b95d 100644 --- a/spatial-coordinate-systems/Cargo.toml +++ b/spatial-coordinate-systems/Cargo.toml @@ -6,8 +6,18 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -dms-coordinates = "1.1.0" +# Excluding because rustc-serialize does not work with wasm +# dms-coordinates v1.1.0 +# └── initial_conditions v0.4.0 +# └── num v0.1.42 +# ├── num-bigint v0.1.44 +# │ └── rustc-serialize v0.3.24 <== +# ├── num-complex v0.1.43 +# │ └── rustc-serialize v0.3.24 <== +# └── num-rational v0.1.42 +# └── rustc-serialize v0.3.24 <== +# dms-coordinates = "1.1.0" + nom = "7.1.3" pluscodes = "0.5.0" -thiserror = "1.0.40" utm = "0.1.6" diff --git a/spatial-coordinate-systems/src/dd.rs b/spatial-coordinate-systems/src/dd.rs index d9cdbf3..9b291c7 100644 --- a/spatial-coordinate-systems/src/dd.rs +++ b/spatial-coordinate-systems/src/dd.rs @@ -1,13 +1,6 @@ -use crate::{ - common::{optional_separator}, -}; -use nom::{ - combinator::{map_opt}, - number::complete::double, - sequence::{tuple}, - IResult, -}; -use std::str::FromStr; +use crate::common::optional_separator; +use nom::{combinator::map_opt, number::complete::double, sequence::tuple, IResult}; +use std::{fmt, str::FromStr}; #[derive(PartialEq, Debug)] pub struct Coordinate { @@ -35,6 +28,12 @@ impl Coordinate { } } +impl fmt::Display for Coordinate { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}, {}", self.lat, self.lon) + } +} + impl TryFrom<(f64, f64)> for Coordinate { type Error = (); diff --git a/spatial-coordinate-systems/src/dmm.rs b/spatial-coordinate-systems/src/dmm.rs index 83b3f0f..9a745c2 100644 --- a/spatial-coordinate-systems/src/dmm.rs +++ b/spatial-coordinate-systems/src/dmm.rs @@ -9,7 +9,7 @@ use nom::{ sequence::tuple, IResult, }; -use std::{convert::Infallible, str::FromStr}; +use std::{convert::Infallible, fmt, str::FromStr}; #[derive(PartialEq, Debug)] pub struct Coordinate(pub DMM, pub DMM); @@ -67,6 +67,18 @@ impl DMM { } } +impl fmt::Display for DMM { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}° {}'", self.degrees, self.minutes) + } +} + +impl fmt::Display for Coordinate { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}, {}", self.0, self.1) + } +} + impl TryInto for Coordinate { type Error = (); diff --git a/spatial-coordinate-systems/src/dms.rs b/spatial-coordinate-systems/src/dms.rs index 20d0314..7722c8b 100644 --- a/spatial-coordinate-systems/src/dms.rs +++ b/spatial-coordinate-systems/src/dms.rs @@ -7,10 +7,10 @@ pub use dms_coordinates::DMS; use nom::{ character::complete::{self}, combinator::{map, map_opt}, - sequence::{tuple}, + sequence::tuple, IResult, }; -use std::str::FromStr; +use std::{fmt, str::FromStr}; #[derive(PartialEq, Debug)] pub struct Coordinate(pub DMS, pub DMS); @@ -73,60 +73,22 @@ impl FromStr for Coordinate { } } -// pub fn parse(i: &str) -> IResult<&str, DMS> { -// map( -// tuple(( -// // Degrees -// complete::i16, -// optional_separator('°'), -// // Minutes -// complete::i16, -// optional_separator('\''), -// // Seconds -// double, -// optional_separator('"'), -// // Direction -// parse_direction, -// )), -// |(degrees, (), minutes, (), seconds, (), direction)| DMS { -// degrees, -// minutes, -// seconds, -// direction, -// }, -// )(i) -// } - -// impl FromStr for DMS { -// type Err = (); - -// /// Recognizes DMS in the formats: -// /// -// /// * `40° 31' 21" N, 105° 5' 39" W` -// /// * `40 31 21 N, 105 5 39 W` -// /// -// /// ```rust -// /// use spatial_coordinate_systems::dms::DMS; -// /// use spatial_coordinate_systems::Direction; -// /// use std::str::FromStr; -// /// -// /// assert_eq!(DMS::from_str("40 31 21 N").unwrap(), DMS { -// /// degrees: 40, -// /// minutes: 31, -// /// seconds: 21_f64, -// /// direction: Direction::North, -// /// }); -// /// assert_eq!(DMS::from_str("40°31' 21 \" N").unwrap(), DMS { -// /// degrees: 40, -// /// minutes: 31, -// /// seconds: 21_f64, -// /// direction: Direction::North, -// /// }); -// /// ``` -// fn from_str(i: &str) -> Result { -// DMS::parse(i).map_err(|_| ()).map(|(_, ret)| ret) -// } -// } +impl fmt::Display for Coordinate { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "{}° {}' {}\"", + self.0.degrees, self.0.minutes, self.0.seconds + )?; + write!(f, ", ")?; + write!( + f, + "{}° {}' {}\"", + self.1.degrees, self.1.minutes, self.1.seconds + )?; + Ok(()) + } +} impl TryInto for Coordinate { type Error = (); diff --git a/spatial-coordinate-systems/src/lib.rs b/spatial-coordinate-systems/src/lib.rs index 7a8f1ad..25486f1 100644 --- a/spatial-coordinate-systems/src/lib.rs +++ b/spatial-coordinate-systems/src/lib.rs @@ -1,8 +1,8 @@ -use std::str::FromStr; +use std::{fmt, str::FromStr}; mod common; pub mod dd; -pub mod dmm; -pub mod dms; +// pub mod dmm; +// pub mod dms; pub mod plus; pub mod utm; @@ -38,8 +38,8 @@ impl Direction { #[derive(Debug, PartialEq)] pub enum Coordinate { DD(dd::Coordinate), - DMS(dms::Coordinate), - DMM(dmm::Coordinate), + // DMS(dms::Coordinate), + // DMM(dmm::Coordinate), UTM(utm::Coordinate), Plus(plus::Coordinate), } @@ -51,8 +51,8 @@ impl Coordinate { space0, alt(( map(dd::Coordinate::parse, Coordinate::DD), - map(dms::Coordinate::parse, Coordinate::DMS), - map(dmm::Coordinate::parse, Coordinate::DMM), + // map(dms::Coordinate::parse, Coordinate::DMS), + // map(dmm::Coordinate::parse, Coordinate::DMM), map(utm::Coordinate::parse, Coordinate::UTM), map(plus::Coordinate::parse, Coordinate::Plus), )), @@ -70,8 +70,8 @@ impl TryFrom for LatLon { fn try_from(value: Coordinate) -> Result { match value { Coordinate::DD(dd) => dd.try_into().or(Err(())), - Coordinate::DMM(dm) => dm.try_into(), - Coordinate::DMS(dms) => dms.try_into(), + // Coordinate::DMM(dmm) => dmm.try_into(), + // Coordinate::DMS(dms) => dms.try_into(), Coordinate::UTM(utm) => utm.try_into(), Coordinate::Plus(plus) => plus.try_into(), } @@ -83,16 +83,16 @@ impl From for Coordinate { Self::DD(c) } } -impl From for Coordinate { - fn from(c: dms::Coordinate) -> Self { - Self::DMS(c) - } -} -impl From for Coordinate { - fn from(c: dmm::Coordinate) -> Self { - Self::DMM(c) - } -} +// impl From for Coordinate { +// fn from(c: dms::Coordinate) -> Self { +// Self::DMS(c) +// } +// } +// impl From for Coordinate { +// fn from(c: dmm::Coordinate) -> Self { +// Self::DMM(c) +// } +// } impl From for Coordinate { fn from(c: utm::Coordinate) -> Self { Self::UTM(c) @@ -104,18 +104,18 @@ impl From for Coordinate { } } -impl TryFrom for dms::Coordinate { - type Error = (); - fn try_from(c: Coordinate) -> Result { - dms::Coordinate::try_from(LatLon::try_from(c)?) - } -} -impl TryFrom for dmm::Coordinate { - type Error = (); - fn try_from(c: Coordinate) -> Result { - dmm::Coordinate::try_from(LatLon::try_from(c)?).or(Err(())) - } -} +// impl TryFrom for dms::Coordinate { +// type Error = (); +// fn try_from(c: Coordinate) -> Result { +// dms::Coordinate::try_from(LatLon::try_from(c)?) +// } +// } +// impl TryFrom for dmm::Coordinate { +// type Error = (); +// fn try_from(c: Coordinate) -> Result { +// dmm::Coordinate::try_from(LatLon::try_from(c)?).or(Err(())) +// } +// } impl TryFrom for utm::Coordinate { type Error = (); fn try_from(c: Coordinate) -> Result { @@ -129,6 +129,17 @@ impl TryFrom for plus::Coordinate { } } +impl fmt::Display for Coordinate { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Coordinate::DD(dd) => write!(f, "{}", dd), + // Coordinate::DMM(dmm) => write!(f, "{}", dmm), + // Coordinate::DMS(dms) => write!(f, "{}", dms), + Coordinate::UTM(utm) => write!(f, "{}", utm), + Coordinate::Plus(plus) => write!(f, "{}", plus), + } + } +} impl FromStr for Coordinate { type Err = (); @@ -161,10 +172,10 @@ mod tests { })) ); - assert_eq!( - dms::Coordinate::try_from(Coordinate::from_str("0.000000 100.500278").unwrap()), - dms::Coordinate::try_from(Coordinate::from_str("0.000000 100.500278").unwrap()) - ) + // assert_eq!( + // dms::Coordinate::try_from(Coordinate::from_str("0.000000 100.500278").unwrap()), + // dms::Coordinate::try_from(Coordinate::from_str("0.000000 100.500278").unwrap()) + // ) // assert_eq!( // LatLon::try_from(Coordinate::from_str("0.000000 100.500278").unwrap()), diff --git a/spatial-coordinate-systems/src/plus.rs b/spatial-coordinate-systems/src/plus.rs index 790e17e..220c349 100644 --- a/spatial-coordinate-systems/src/plus.rs +++ b/spatial-coordinate-systems/src/plus.rs @@ -1,12 +1,6 @@ -use crate::{ - LatLon, -}; -use nom::{ - bytes::complete::take_while, - combinator::{map_opt}, - IResult, -}; -use std::str::FromStr; +use crate::LatLon; +use nom::{bytes::complete::take_while, combinator::map_opt, IResult}; +use std::{fmt, str::FromStr}; // TODO: Pick an approprite length const PLUSCODE_LENGTH: usize = 8; @@ -42,6 +36,12 @@ fn pluscode_chars(i: &str) -> IResult<&str, &str> { take_while(|c| PLUSCODE_CHARS.contains(&c))(i) } +impl fmt::Display for Coordinate { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.0) + } +} + impl TryInto for Coordinate { type Error = (); diff --git a/spatial-coordinate-systems/src/utm.rs b/spatial-coordinate-systems/src/utm.rs index 9f75865..cbc6a2d 100644 --- a/spatial-coordinate-systems/src/utm.rs +++ b/spatial-coordinate-systems/src/utm.rs @@ -9,7 +9,7 @@ use nom::{ sequence::tuple, IResult, }; -use std::str::FromStr; +use std::{fmt, str::FromStr}; #[derive(PartialEq, Debug)] pub struct Coordinate { @@ -83,6 +83,16 @@ impl FromStr for Coordinate { } } +impl fmt::Display for Coordinate { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "{}{} {} {}", + self.zone_num, self.zone_letter, self.easting, self.northing, + ) + } +} + impl TryInto for Coordinate { type Error = (); diff --git a/xpin-wasm/Cargo.toml b/xpin-wasm/Cargo.toml index 0ced73d..57097a5 100644 --- a/xpin-wasm/Cargo.toml +++ b/xpin-wasm/Cargo.toml @@ -11,3 +11,4 @@ crate-type = ["cdylib"] [dependencies] wasm-bindgen = "0.2" xpin = {path=".."} +spatial-coordinate-systems = {path="../spatial-coordinate-systems/"} diff --git a/xpin-wasm/src/lib.rs b/xpin-wasm/src/lib.rs index ef00f0d..a2b54ae 100644 --- a/xpin-wasm/src/lib.rs +++ b/xpin-wasm/src/lib.rs @@ -46,6 +46,13 @@ impl EncodedAddress { } } +#[wasm_bindgen] +pub fn parse(i: &str) -> Result { + spatial_coordinate_systems::Coordinate::from_str(i) + .map(|c| format!("{c:?}")) + .map_err(|()| format!("Could not parse str as a coordinate {i:?}")) +} + impl From<&'_ Address<'_>> for EncodedAddress { fn from(addr: &Address) -> Self { let (lat, lon) = addr.as_lat_lon();