forked from extern/nushell
commit
f5c7bed77a
@ -60,6 +60,7 @@ pub async fn cli() -> Result<(), Box<Error>> {
|
|||||||
command("trim", trim::trim),
|
command("trim", trim::trim),
|
||||||
command("to-array", to_array::to_array),
|
command("to-array", to_array::to_array),
|
||||||
command("to-json", to_json::to_json),
|
command("to-json", to_json::to_json),
|
||||||
|
command("to-toml", to_toml::to_toml),
|
||||||
Arc::new(Where),
|
Arc::new(Where),
|
||||||
Arc::new(Config),
|
Arc::new(Config),
|
||||||
command("sort-by", sort_by::sort_by),
|
command("sort-by", sort_by::sort_by),
|
||||||
|
@ -19,6 +19,7 @@ crate mod split_row;
|
|||||||
crate mod take;
|
crate mod take;
|
||||||
crate mod to_array;
|
crate mod to_array;
|
||||||
crate mod to_json;
|
crate mod to_json;
|
||||||
|
crate mod to_toml;
|
||||||
crate mod trim;
|
crate mod trim;
|
||||||
crate mod view;
|
crate mod view;
|
||||||
crate mod where_;
|
crate mod where_;
|
||||||
|
9
src/commands/to_toml.rs
Normal file
9
src/commands/to_toml.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
use crate::object::{Primitive, Value};
|
||||||
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
pub fn to_toml(args: CommandArgs) -> Result<OutputStream, ShellError> {
|
||||||
|
let out = args.input;
|
||||||
|
Ok(out
|
||||||
|
.map(|a| ReturnValue::Value(Value::Primitive(Primitive::String(toml::to_string(&a).unwrap()))))
|
||||||
|
.boxed())
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
use crate::object::types::Type;
|
use crate::object::types::Type;
|
||||||
use derive_new::new;
|
use derive_new::new;
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
|
use serde::{Serialize, Serializer};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize, Hash)]
|
#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize, Hash)]
|
||||||
pub enum DescriptorName {
|
pub enum DescriptorName {
|
||||||
@ -31,13 +32,29 @@ impl DescriptorName {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq, Hash, new)]
|
#[derive(Debug, Deserialize, Clone, Eq, PartialEq, Hash, new)]
|
||||||
pub struct DataDescriptor {
|
pub struct DataDescriptor {
|
||||||
crate name: DescriptorName,
|
crate name: DescriptorName,
|
||||||
crate readonly: bool,
|
crate readonly: bool,
|
||||||
crate ty: Type,
|
crate ty: Type,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Serialize for DataDescriptor {
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
match self.name {
|
||||||
|
DescriptorName::String(ref s) => {
|
||||||
|
serializer.serialize_str(s)
|
||||||
|
}
|
||||||
|
DescriptorName::ValueOf => {
|
||||||
|
serializer.serialize_str("value")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<&str> for DataDescriptor {
|
impl From<&str> for DataDescriptor {
|
||||||
fn from(input: &str) -> DataDescriptor {
|
fn from(input: &str) -> DataDescriptor {
|
||||||
DataDescriptor {
|
DataDescriptor {
|
||||||
|
@ -4,10 +4,11 @@ use crate::object::DataDescriptor;
|
|||||||
use crate::object::{Primitive, Value};
|
use crate::object::{Primitive, Value};
|
||||||
use derive_new::new;
|
use derive_new::new;
|
||||||
use indexmap::IndexMap;
|
use indexmap::IndexMap;
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::Deserialize;
|
||||||
|
use serde::ser::{Serialize, Serializer, SerializeMap};
|
||||||
use std::cmp::{Ordering, PartialOrd};
|
use std::cmp::{Ordering, PartialOrd};
|
||||||
|
|
||||||
#[derive(Debug, Default, Eq, PartialEq, Serialize, Deserialize, Clone, new)]
|
#[derive(Debug, Default, Eq, PartialEq, Deserialize, Clone, new)]
|
||||||
pub struct Dictionary {
|
pub struct Dictionary {
|
||||||
entries: IndexMap<DataDescriptor, Value>,
|
entries: IndexMap<DataDescriptor, Value>,
|
||||||
}
|
}
|
||||||
@ -19,6 +20,28 @@ impl PartialOrd for Dictionary {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Serialize for Dictionary {
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
let mut map = serializer.serialize_map(Some(self.entries.len()))?;
|
||||||
|
for (k, v) in self.entries.iter() {
|
||||||
|
match v {
|
||||||
|
Value::Object(_) => {},
|
||||||
|
_ => map.serialize_entry(k, v)?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (k, v) in self.entries.iter() {
|
||||||
|
match v {
|
||||||
|
Value::Object(_) => map.serialize_entry(k, v)?,
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
map.end()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<IndexMap<String, Value>> for Dictionary {
|
impl From<IndexMap<String, Value>> for Dictionary {
|
||||||
fn from(input: IndexMap<String, Value>) -> Dictionary {
|
fn from(input: IndexMap<String, Value>) -> Dictionary {
|
||||||
let mut out = IndexMap::default();
|
let mut out = IndexMap::default();
|
||||||
|
Loading…
Reference in New Issue
Block a user