change order of serialization of Span by serializing to temporary buffer
This commit is contained in:
parent
116a15e8ea
commit
5b5465488f
|
@ -30,6 +30,7 @@ chksum-md5 = { version = "0.1.0", optional = true }
|
||||||
colored = "3.0.0"
|
colored = "3.0.0"
|
||||||
derive_more = { version = "2.0.1", default-features = false, features = ["deref", "deref_mut", "from"] }
|
derive_more = { version = "2.0.1", default-features = false, features = ["deref", "deref_mut", "from"] }
|
||||||
enum-as-inner = "0.6.0"
|
enum-as-inner = "0.6.0"
|
||||||
|
flexbuffers = "25.2.10"
|
||||||
getset = "0.1.2"
|
getset = "0.1.2"
|
||||||
itertools = "0.14.0"
|
itertools = "0.14.0"
|
||||||
mlua = { version = "0.10.2", features = ["lua54", "vendored"], optional = true }
|
mlua = { version = "0.10.2", features = ["lua54", "vendored"], optional = true }
|
||||||
|
|
23
src/serde.rs
23
src/serde.rs
|
@ -1,7 +1,7 @@
|
||||||
//! Utilities for (de-)serializing
|
//! Utilities for (de-)serializing
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashMap,
|
collections::BTreeMap,
|
||||||
marker::PhantomData,
|
marker::PhantomData,
|
||||||
sync::{Arc, LazyLock, Mutex, RwLock},
|
sync::{Arc, LazyLock, Mutex, RwLock},
|
||||||
};
|
};
|
||||||
|
@ -36,13 +36,18 @@ where
|
||||||
{
|
{
|
||||||
*DEDUPLICATE_SOURCE_FILES.write().unwrap() = true;
|
*DEDUPLICATE_SOURCE_FILES.write().unwrap() = true;
|
||||||
SERIALIZE_DATA.lock().unwrap().clear();
|
SERIALIZE_DATA.lock().unwrap().clear();
|
||||||
let mut s = serializer.serialize_struct("SourceFileWrapper", 2)?;
|
let mut serialized_data = flexbuffers::FlexbufferSerializer::new();
|
||||||
s.serialize_field("data", &self.0)?;
|
self.0
|
||||||
*DEDUPLICATE_SOURCE_FILES.write().unwrap() = false;
|
.serialize(&mut serialized_data)
|
||||||
|
.map_err(|_| serde::ser::Error::custom("could not buffer serialization"))?;
|
||||||
|
drop(serialized_data);
|
||||||
|
let mut s = serializer.serialize_struct("SerdeWrapper", 3)?;
|
||||||
s.serialize_field(
|
s.serialize_field(
|
||||||
"source_files",
|
"source_files",
|
||||||
&SERIALIZE_DATA.lock().unwrap().id_to_source_file,
|
&SERIALIZE_DATA.lock().unwrap().id_to_source_file,
|
||||||
)?;
|
)?;
|
||||||
|
s.serialize_field("data", &self.0)?;
|
||||||
|
*DEDUPLICATE_SOURCE_FILES.write().unwrap() = false;
|
||||||
s.end()
|
s.end()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,7 +83,7 @@ where
|
||||||
where
|
where
|
||||||
V: de::SeqAccess<'de>,
|
V: de::SeqAccess<'de>,
|
||||||
{
|
{
|
||||||
let source_files: HashMap<usize, SourceFile> = seq
|
let source_files: BTreeMap<usize, SourceFile> = seq
|
||||||
.next_element()?
|
.next_element()?
|
||||||
.ok_or_else(|| de::Error::invalid_length(0, &self))?;
|
.ok_or_else(|| de::Error::invalid_length(0, &self))?;
|
||||||
*DESERIALIZE_DATA.write().unwrap() = Some(DeserializeData {
|
*DESERIALIZE_DATA.write().unwrap() = Some(DeserializeData {
|
||||||
|
@ -98,7 +103,7 @@ where
|
||||||
where
|
where
|
||||||
V: de::MapAccess<'de>,
|
V: de::MapAccess<'de>,
|
||||||
{
|
{
|
||||||
let mut source_files: Option<HashMap<usize, SourceFile>> = None;
|
let mut source_files: Option<BTreeMap<usize, SourceFile>> = None;
|
||||||
let mut data = None;
|
let mut data = None;
|
||||||
|
|
||||||
while let Some(key) = map.next_key()? {
|
while let Some(key) = map.next_key()? {
|
||||||
|
@ -147,8 +152,8 @@ where
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
struct SerializeData {
|
struct SerializeData {
|
||||||
id_counter: usize,
|
id_counter: usize,
|
||||||
ptr_to_id: HashMap<usize, usize>,
|
ptr_to_id: BTreeMap<usize, usize>,
|
||||||
id_to_source_file: HashMap<usize, SourceFile>,
|
id_to_source_file: BTreeMap<usize, SourceFile>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SerializeData {
|
impl SerializeData {
|
||||||
|
@ -198,7 +203,7 @@ impl Serialize for Span {
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
struct DeserializeData {
|
struct DeserializeData {
|
||||||
id_to_source_file: HashMap<usize, Arc<SourceFile>>,
|
id_to_source_file: BTreeMap<usize, Arc<SourceFile>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de> Deserialize<'de> for Span {
|
impl<'de> Deserialize<'de> for Span {
|
||||||
|
|
Loading…
Reference in New Issue