haste_fhir_serialization_json/
traits.rs

1use std::io::BufWriter;
2
3use crate::errors::DeserializeError;
4use serde_json::Value;
5use thiserror::Error;
6
7#[derive(Error, Debug)]
8pub enum SerializeError {
9    #[error("Serialization error: {0}")]
10    IOError(#[from] std::io::Error),
11    #[error("Serialization error: {0}")]
12    SerializeError(#[from] std::io::IntoInnerError<BufWriter<Vec<u8>>>),
13    #[error("UTF-8 conversion error: {0}")]
14    Utf8Error(#[from] std::string::FromUtf8Error),
15}
16pub trait FHIRJSONSerializer {
17    fn serialize_value(&self, writer: &mut dyn std::io::Write) -> Result<bool, SerializeError>;
18    fn serialize_extension(&self, writer: &mut dyn std::io::Write) -> Result<bool, SerializeError>;
19    fn serialize_field(
20        &self,
21        field: &str,
22        writer: &mut dyn std::io::Write,
23    ) -> Result<bool, SerializeError>;
24    fn is_fp_primitive(&self) -> bool;
25}
26
27pub struct ContextAsField<'a> {
28    pub field: &'a str,
29    pub is_primitive: bool,
30}
31
32impl<'a> ContextAsField<'a> {
33    pub fn new(field: &'a str, is_primitive: bool) -> Self {
34        ContextAsField {
35            field,
36            is_primitive,
37        }
38    }
39}
40
41pub enum Context<'a> {
42    AsField(ContextAsField<'a>),
43    AsValue,
44}
45
46impl<'a> From<(&'a str, bool)> for Context<'a> {
47    fn from(value: (&'a str, bool)) -> Self {
48        Context::AsField(ContextAsField::new(value.0, value.1))
49    }
50}
51
52impl<'a> From<(&'a String, bool)> for Context<'a> {
53    fn from(value: (&'a String, bool)) -> Self {
54        Context::AsField(ContextAsField::new(value.0.as_str(), value.1))
55    }
56}
57
58pub trait FHIRJSONDeserializer: Sized {
59    fn from_json_str(s: &str) -> Result<Self, DeserializeError>;
60    fn from_serde_value(v: &Value, context: Context) -> Result<Self, DeserializeError>;
61}
62
63pub trait IsFHIRPrimitive {
64    fn is_fp_primitive(&self) -> bool;
65}