haste_fhir_serialization_json/
traits.rs1use 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}