Skip to content

Commit

Permalink
broken
Browse files Browse the repository at this point in the history
  • Loading branch information
clemux committed Jun 10, 2023
1 parent 3d72d22 commit 61e9f51
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 9 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ libdeflate = ["libdeflater/freestanding"]
serialize = []

[dependencies]
jomini = { version = "0.21", features = ["json"] }
jomini = { git = "https://github.com/rakaly/jomini.git", branch = "deser", features = ["json"] }
zip = { version = "0.6", default-features = false }
serde = { version = "1", features = ["derive"] }
thiserror = "1"
Expand Down
1 change: 1 addition & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ mod header;
mod melt;
pub mod models;
mod tokens;
mod maybe_object;

pub use ck3date::*;
pub use errors::*;
Expand Down
54 changes: 54 additions & 0 deletions src/maybe_object.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
use std::fmt;
use std::marker::PhantomData;
use serde::{Deserialize, Deserializer, de, Serialize};

#[derive(Debug, Clone, PartialEq, Serialize)]
pub enum MaybeObject<T> {
Text(String),
Object(T),
}

impl<'de, T> Deserialize<'de> for MaybeObject<T>
where
T: Deserialize<'de>,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
struct MaybeObjectVisitor<T1> {
marker: PhantomData<T1>,
}

impl<'de, T1> de::Visitor<'de> for MaybeObjectVisitor<T1>
where
T1: Deserialize<'de>,
{
type Value = MaybeObject<T1>;

fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("an object or string")
}

fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
where
E: de::Error,
{
Ok(MaybeObject::Text(String::from(v)))
}

fn visit_map<A>(self, map: A) -> Result<Self::Value, A::Error>
where
A: de::MapAccess<'de>,
{
let mvd = de::value::MapAccessDeserializer::new(map);
let result = T1::deserialize(mvd)?;
Ok(MaybeObject::Object(result))
}
}

deserializer.deserialize_map(MaybeObjectVisitor {
marker: PhantomData,
})
}
}
19 changes: 11 additions & 8 deletions src/models/gamestate.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
use std::collections::HashMap;
use super::MetadataOwned;
use crate::flavor::reencode_float;
use serde::{Deserialize, Deserializer, Serialize};


use crate::Ck3Date;
use serde::{Deserialize, Deserializer, Serialize};

use crate::{Ck3Date};
use crate::flavor::reencode_float;
use crate::maybe_object::MaybeObject;

use super::MetadataOwned;

#[derive(Debug, Deserialize)]
pub struct Gamestate {
Expand All @@ -20,10 +22,11 @@ pub struct Gamestate {

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Dynasties {
pub dynasty_house: HashMap<u64, DynastyHouse>,
pub dynasties: HashMap<u64, Dynasty>,
pub dynasty_house: HashMap<u64, MaybeObject<DynastyHouse>>,
pub dynasties: HashMap<u64, MaybeObject<Dynasty>>,
}


#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct PlayedCharacter {
pub name: String,
Expand All @@ -33,7 +36,7 @@ pub struct PlayedCharacter {
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DynastyHouse {
pub name: Option<String>,
pub dynasty: u64
// pub dynasty: Option<String>
}

#[derive(Debug, Deserialize, Serialize, Clone)]
Expand Down Expand Up @@ -113,4 +116,4 @@ where

pub (crate) fn default_false() -> bool {
false
}
}

0 comments on commit 61e9f51

Please sign in to comment.