diff --git a/Cargo.lock b/Cargo.lock
index cc3388b..927b763 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -126,7 +126,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "csdif-core"
-version = "0.1.1"
+version = "0.1.2"
dependencies = [
"env_logger",
"log",
@@ -371,9 +371,9 @@ dependencies = [
[[package]]
name = "is_terminal_polyfill"
-version = "1.70.1"
+version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
+checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
name = "itoa"
@@ -456,9 +456,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "once_cell_polyfill"
-version = "1.70.1"
+version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
+checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
name = "percent-encoding"
@@ -688,9 +688,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
-version = "2.0.106"
+version = "2.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
+checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b"
dependencies = [
"proc-macro2",
"quote",
@@ -740,9 +740,9 @@ dependencies = [
[[package]]
name = "unicode-ident"
-version = "1.0.19"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
+checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06"
[[package]]
name = "url"
diff --git a/Cargo.toml b/Cargo.toml
index 042faae..70208f1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "csdif-core"
-version = "0.1.1"
+version = "0.1.2"
edition = "2024"
license = "MIT"
description = "Core library for modeling, validating, and transforming CSDIF data"
diff --git a/src/error.rs b/src/error.rs
index 0c953b4..8c33c9e 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -27,3 +27,14 @@ impl fmt::Display for CsdifError {
}
}
+#[derive(Debug)]
+pub struct MappingError {
+ pub message: String,
+}
+
+#[derive(Debug)]
+pub enum ContextError {
+ NotFound,
+ InvalidFormat,
+}
+
diff --git a/src/mapper.rs b/src/forward_mapper.rs
similarity index 78%
rename from src/mapper.rs
rename to src/forward_mapper.rs
index ff5d293..f221b80 100644
--- a/src/mapper.rs
+++ b/src/forward_mapper.rs
@@ -2,6 +2,8 @@
// SPDX-License-Identifier: MIT
use sensorml::model::document::SensorMLDocument;
+use crate::error::ContextError;
+use crate::error::MappingError;
pub trait InitiativeForwardMapper {
fn map_to_sensorml(
@@ -16,17 +18,6 @@ pub trait ContextProvider {
fn get_station_profile(&self, id: &str) -> Result<StationProfile, ContextError>;
}
-#[derive(Debug)]
-pub struct MappingError {
- pub message: String,
-}
-
-#[derive(Debug)]
-pub enum ContextError {
- NotFound,
- InvalidFormat,
-}
-
#[derive(Debug)]
pub struct StationProfile {
pub id: String,
diff --git a/src/lib.rs b/src/lib.rs
index 659603a..e0136f1 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,7 +1,8 @@
// SPDX-License-Identifier: MIT
pub mod error;
-pub mod mapper;
+pub mod forward_mapper;
+pub mod reverse_mapper;
pub mod model;
pub mod transform;
pub mod validate;
diff --git a/src/reverse_mapper.rs b/src/reverse_mapper.rs
new file mode 100644
index 0000000..e0199cd
--- /dev/null
+++ b/src/reverse_mapper.rs
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: MIT
+
+use sensorml::model::document::SensorMLDocument;
+
+/// Trait for mapping SensorML documents back into initiative-specific JSON.
+pub trait InitiativeReverseMapper {
+ fn map_from_sensorml(
+ &self,
+ input: &SensorMLDocument,
+ ) -> Result<serde_json::Value, crate::error::MappingError>;
+}
+