mirror of https://github.com/kdl-org/kdl-rs.git
update se.rs too
This commit is contained in:
parent
78ee15c9fb
commit
4397ae8cd7
50
src/se.rs
50
src/se.rs
|
|
@ -28,13 +28,13 @@
|
||||||
//!
|
//!
|
||||||
//! let config = Config { name: "my-app".into(), port: 8080 };
|
//! let config = Config { name: "my-app".into(), port: 8080 };
|
||||||
//! let kdl = kdl::se::to_string(&config).unwrap();
|
//! let kdl = kdl::se::to_string(&config).unwrap();
|
||||||
//! assert_eq!(kdl, "name \"my-app\"\nport 8080\n");
|
//! assert_eq!(kdl, "name my-app\nport 8080\n");
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
use serde::ser::{self, Serialize};
|
use serde::ser::{self, Serialize};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use crate::{KdlDocument, KdlEntry, KdlEntryFormat, KdlNode, KdlValue};
|
use crate::{KdlDocument, KdlEntry, KdlNode, KdlValue};
|
||||||
|
|
||||||
/// Errors that can occur during KDL serialization.
|
/// Errors that can occur during KDL serialization.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
@ -73,7 +73,7 @@ impl ser::Error for Error {
|
||||||
///
|
///
|
||||||
/// let config = Config { name: "my-app".into(), port: 8080 };
|
/// let config = Config { name: "my-app".into(), port: 8080 };
|
||||||
/// let kdl = kdl::se::to_string(&config).unwrap();
|
/// let kdl = kdl::se::to_string(&config).unwrap();
|
||||||
/// assert_eq!(kdl, "name \"my-app\"\nport 8080\n");
|
/// assert_eq!(kdl, "name my-app\nport 8080\n");
|
||||||
/// ```
|
/// ```
|
||||||
pub fn to_string<T: Serialize>(value: &T) -> Result<String, Error> {
|
pub fn to_string<T: Serialize>(value: &T) -> Result<String, Error> {
|
||||||
let doc = to_document(value)?;
|
let doc = to_document(value)?;
|
||||||
|
|
@ -89,7 +89,7 @@ pub fn to_document<T: Serialize>(value: &T) -> Result<KdlDocument, Error> {
|
||||||
doc: KdlDocument::new(),
|
doc: KdlDocument::new(),
|
||||||
};
|
};
|
||||||
value.serialize(&mut ser)?;
|
value.serialize(&mut ser)?;
|
||||||
Ok(ser.doc)
|
Ok(dbg!(ser.doc))
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DocumentSerializer {
|
struct DocumentSerializer {
|
||||||
|
|
@ -160,12 +160,7 @@ impl<'a> ser::Serializer for &'a mut DocumentSerializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
|
fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
|
||||||
let mut entry = KdlEntry::new(KdlValue::String(v.to_string()));
|
let entry = KdlEntry::new(KdlValue::String(v.to_string()));
|
||||||
entry.set_format(KdlEntryFormat {
|
|
||||||
value_repr: format!("\"{}\"", v.escape_default()),
|
|
||||||
leading: " ".to_string(),
|
|
||||||
..Default::default()
|
|
||||||
});
|
|
||||||
let mut node = KdlNode::new("-");
|
let mut node = KdlNode::new("-");
|
||||||
node.entries_mut().push(entry);
|
node.entries_mut().push(entry);
|
||||||
self.doc.nodes_mut().push(node);
|
self.doc.nodes_mut().push(node);
|
||||||
|
|
@ -515,12 +510,7 @@ impl<'a> ser::Serializer for &'a mut NodeValueSerializer<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
|
fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
|
||||||
let mut entry = KdlEntry::new(KdlValue::String(v.to_string()));
|
let entry = KdlEntry::new(KdlValue::String(v.to_string()));
|
||||||
entry.set_format(KdlEntryFormat {
|
|
||||||
value_repr: format!("\"{}\"", v.escape_default()),
|
|
||||||
leading: " ".to_string(),
|
|
||||||
..Default::default()
|
|
||||||
});
|
|
||||||
self.node.entries_mut().push(entry);
|
self.node.entries_mut().push(entry);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
@ -761,15 +751,17 @@ impl<'a> ser::SerializeStruct for NodeChildMapSerializer<'a> {
|
||||||
key: &'static str,
|
key: &'static str,
|
||||||
value: &T,
|
value: &T,
|
||||||
) -> Result<(), Self::Error> {
|
) -> Result<(), Self::Error> {
|
||||||
if let Some(attr_name) = key.strip_prefix('@') {
|
if let Some(attr_name) = key.strip_prefix("#@") {
|
||||||
let kdl_val = to_kdl_value(value)?;
|
let kdl_val = to_kdl_value(value)?;
|
||||||
self.node
|
self.node
|
||||||
.entries_mut()
|
.entries_mut()
|
||||||
.push(KdlEntry::new_prop(attr_name, kdl_val));
|
.push(KdlEntry::new_prop(attr_name, kdl_val));
|
||||||
} else if key == "$arguments" {
|
} else if key == "#args" {
|
||||||
let mut ser = ArgsSerializer { node: self.node };
|
let mut ser = ArgsSerializer { node: self.node };
|
||||||
value.serialize(&mut ser)?;
|
value.serialize(&mut ser)?;
|
||||||
} else if key.starts_with("$argument") {
|
} else if key.starts_with("#") {
|
||||||
|
// TODO(@zkat): How do we get the ordering here?... This will just
|
||||||
|
// insert stuff as we discover it.
|
||||||
let kdl_val = to_kdl_value(value)?;
|
let kdl_val = to_kdl_value(value)?;
|
||||||
self.node.entries_mut().push(KdlEntry::new(kdl_val));
|
self.node.entries_mut().push(KdlEntry::new(kdl_val));
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1430,7 +1422,7 @@ mod tests {
|
||||||
port: 8080,
|
port: 8080,
|
||||||
};
|
};
|
||||||
let kdl = to_string(&config).unwrap();
|
let kdl = to_string(&config).unwrap();
|
||||||
assert_eq!(kdl, "name \"my-app\"\nport 8080\n");
|
assert_eq!(kdl, "name my-app\nport 8080\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -1455,7 +1447,7 @@ mod tests {
|
||||||
let kdl = to_string(&config).unwrap();
|
let kdl = to_string(&config).unwrap();
|
||||||
|
|
||||||
assert!(kdl.contains("server"));
|
assert!(kdl.contains("server"));
|
||||||
assert!(kdl.contains("host \"localhost\""));
|
assert!(kdl.contains("host localhost"));
|
||||||
assert!(kdl.contains("port 8080"));
|
assert!(kdl.contains("port 8080"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1487,7 +1479,7 @@ mod tests {
|
||||||
name: Some("hello".into()),
|
name: Some("hello".into()),
|
||||||
};
|
};
|
||||||
let kdl = to_string(&config).unwrap();
|
let kdl = to_string(&config).unwrap();
|
||||||
assert!(kdl.contains("name \"hello\""));
|
assert!(kdl.contains("name hello"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -1505,7 +1497,7 @@ mod tests {
|
||||||
let config = Config { color: Color::Red };
|
let config = Config { color: Color::Red };
|
||||||
let kdl = to_string(&config).unwrap();
|
let kdl = to_string(&config).unwrap();
|
||||||
dbg!(&kdl);
|
dbg!(&kdl);
|
||||||
assert!(kdl.contains("color \"Red\""));
|
assert!(kdl.contains("color Red"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -1570,9 +1562,9 @@ mod tests {
|
||||||
fn rename_props() {
|
fn rename_props() {
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
struct Server {
|
struct Server {
|
||||||
#[serde(rename = "@host")]
|
#[serde(rename = "#@host")]
|
||||||
host: String,
|
host: String,
|
||||||
#[serde(rename = "@port")]
|
#[serde(rename = "#@port")]
|
||||||
port: u16,
|
port: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1597,9 +1589,9 @@ mod tests {
|
||||||
fn rename_args() {
|
fn rename_args() {
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
struct Server {
|
struct Server {
|
||||||
#[serde(rename = "$argument1")]
|
#[serde(rename = "#0")]
|
||||||
host: String,
|
host: String,
|
||||||
#[serde(rename = "@port")]
|
#[serde(rename = "#@port")]
|
||||||
port: u16,
|
port: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1624,9 +1616,9 @@ mod tests {
|
||||||
fn rename_all_args() {
|
fn rename_all_args() {
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
struct Command {
|
struct Command {
|
||||||
#[serde(rename = "@name")]
|
#[serde(rename = "#@name")]
|
||||||
name: String,
|
name: String,
|
||||||
#[serde(rename = "$arguments")]
|
#[serde(rename = "#args")]
|
||||||
args: Vec<String>,
|
args: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue