boilerplate for serializing the block code
This commit is contained in:
parent
45857b064b
commit
561781e3df
1 changed files with 61 additions and 0 deletions
|
@ -9,6 +9,8 @@ use std::collections::HashMap;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::collections::VecDeque;
|
use std::collections::VecDeque;
|
||||||
|
|
||||||
|
use serde_json::{json, Value};
|
||||||
|
|
||||||
pub trait BlockView {
|
pub trait BlockView {
|
||||||
fn rows(&self) -> usize;
|
fn rows(&self) -> usize;
|
||||||
fn contains(&self, idx: usize) -> Option<usize>;
|
fn contains(&self, idx: usize) -> Option<usize>;
|
||||||
|
@ -805,6 +807,33 @@ impl BlockArea {
|
||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn serialize(&self) -> Value {
|
||||||
|
let mut v = json!({});
|
||||||
|
|
||||||
|
v
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deserialize(s: &str) -> Result<Box<BlockArea>, serde_json::Error> {
|
||||||
|
let v: Value = serde_json::from_str(s)?;
|
||||||
|
|
||||||
|
let blocks = HashMap::new();
|
||||||
|
let size = (0, 0);
|
||||||
|
let auto_shrink = false;
|
||||||
|
let header = "".to_string();
|
||||||
|
|
||||||
|
let mut ba = Box::new(BlockArea {
|
||||||
|
blocks,
|
||||||
|
origin_map: HashMap::new(),
|
||||||
|
size,
|
||||||
|
auto_shrink,
|
||||||
|
header,
|
||||||
|
});
|
||||||
|
|
||||||
|
ba.update_origin_map();
|
||||||
|
|
||||||
|
Ok(ba)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||||
|
@ -974,6 +1003,38 @@ pub struct BlockFunSnapshot {
|
||||||
cur_id: usize,
|
cur_id: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl BlockFunSnapshot {
|
||||||
|
pub fn serialize(&self) -> String {
|
||||||
|
let mut v = json!({
|
||||||
|
"VERSION": 1,
|
||||||
|
});
|
||||||
|
|
||||||
|
v["current_block_id_counter"] = self.cur_id.into();
|
||||||
|
|
||||||
|
let mut areas = json!([]);
|
||||||
|
if let Value::Array(areas) = &mut areas {
|
||||||
|
for area in self.areas.iter() {
|
||||||
|
areas.push(area.serialize());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
v["areas"] = areas;
|
||||||
|
|
||||||
|
v.to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deserialize(s: &str) -> Result<BlockFunSnapshot, serde_json::Error> {
|
||||||
|
let v: Value = serde_json::from_str(s)?;
|
||||||
|
|
||||||
|
let mut areas = vec![];
|
||||||
|
|
||||||
|
Ok(BlockFunSnapshot {
|
||||||
|
areas,
|
||||||
|
cur_id: v["current_block_id_counter"].as_i64().unwrap_or(0) as usize,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct BlockFun {
|
pub struct BlockFun {
|
||||||
language: Rc<RefCell<BlockLanguage>>,
|
language: Rc<RefCell<BlockLanguage>>,
|
||||||
|
|
Loading…
Reference in a new issue