pub enum Value {
}Expand description
Value represents all values that nodes can use as input and output.
§Data Types
- Scalar types:
- Null:
Value::Null. - Boolean:
Value::Bool. - Numbers:
Value::U64,Value::I64,Value::U128,Value::I128,Value::Decimal,Value::F64. - String:
Value::String. - Binary:
Value::B32,Value::B64,Value::Bytes.
- Null:
- Array:
Value::Array - Map:
Value::Map
§Node Input
Node receives a flow_value::Map as its input. It is possible to use the map directly, but
it is often preferred to convert it to structs or enums of your choice.
Value implements Deserializer, therefore it can be converted to
any types supported by Serde. We provide 2 helpers:
flow_value::from_value-Valueto anyT: Deserialize.flow_value::from_map-Mapto anyT: Deserialize.
§Node Output
Node returns a flow_value::Map as its output.
Building the output directly with flow_value::map! and
flow_value::array! macros:
let value = flow_value::map! {
"customer_name" => "John",
"items" => flow_value::array![1, 2, 3],
};Value also implements Serializer, you can use
flow_value::to_map to convert any type T: Serialize into value::Map.
#[derive(serde::Serialize)]
struct Order {
customer_name: String,
items: Vec<i32>,
}
flow_value::to_map(&Order {
customer_name: "John".to_owned(),
items: [1, 2, 3].into(),
})
.unwrap();§JSON representation
When using Value in database and HTTP APIs, it is converted to a JSON object:
{
"<variant identifier>": <data>
}Identifiers of each enum variant:
- N:
Value::Null - S:
Value::String - B:
Value::Bool - U:
Value::U64 - I:
Value::I64 - F:
Value::F64 - D:
Value::Decimal - U1:
Value::U128 - I1:
Value::I128 - B3:
Value::B32 - B6:
Value::B64 - BY:
Value::Bytes - A:
Value::Array - M:
Value::Map
See variant’s documentation to see how data are encoded.
Use serde_json to encode and decode Value as JSON:
use flow_value::Value;
let value = Value::U64(10);
// encode Value to JSON
let json = serde_json::to_string(&value).unwrap();
assert_eq!(json, r#"{"U":"10"}"#);
// decode JSON to Value
let value1 = serde_json::from_str::<Value>(&json).unwrap();
assert_eq!(value1, value);Variants§
Null
JSON representation:
{ "N": 0 }String(String)
UTF-8 string.
JSON representation:
{ "S": "hello" }Bool(bool)
JSON representation:
{ "B": true }U64(u64)
JSON representation:
{ "U": "100" }Numbers are encoded as JSON string to avoid losing precision when reading them in Javascript/Typescript.
I64(i64)
JSON representation:
{ "I": "-100" }F64(f64)
JSON representation:
{ "F": "0.0" }Scientific notation is supported:
{ "F": "1e9" }Decimal(Decimal)
rust_decimal::Decimal, suitable for financial calculations.
JSON representation:
{ "D": "3.1415926535897932384626433832" }U128(u128)
JSON representation:
{ "U1": "340282366920938463463374607431768211455" }I128(i128)
JSON representation:
{ "I1": "-170141183460469231731687303715884105728" }B32([u8; 32])
32-bytes binary values, usually a Solana public key.
JSON representation: encoded as a base-58 string
{ "B3": "FMQUifdAHTytSxhiK4N7LmpvKRZaUmBnNnZmzFsdTPHB" }B64([u8; 64])
64-bytes binary values, usually a Solana signature or keypair.
JSON representation: encoded as a base-58 string
{ "B6": "4onDpbfeT7nNN9MNMvTEZRn6pbtrQc1pdTBJB4a7HbfhAE6c5bkbuuFfYtkqs99hAqp5o6j7W1VyuKDxCn79k3Tk" }Bytes(Bytes)
Binary values with length other than 32 and 64.
JSON representation: encoded as a base-64 string
{ "BY": "UmFpbnk=" }Array(Vec<Value>)
An array of Value. Array can contains other arrays, maps, ect. Array elements do not
have to be of the same type.
JSON representation:
Example array containing a number and a string:
{
"A": [
{ "U": 0 },
{ "S": "hello" }
]
}Map(IndexMap<String, Value>)
A key-value map, implemented with indexmap::IndexMap, will preserve insertion order.
Keys are strings and values can be any Value.
JSON representation:
{
"M": {
"first name": { "S": "John" },
"age": { "U": "20" }
}
}Implementations§
Source§impl Value
impl Value
pub fn to_bincode(&self) -> Result<Vec<u8>, EncodeError>
pub fn from_bincode(data: &[u8]) -> Result<Value, DecodeError>
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Value
impl<'de> Deserialize<'de> for Value
Source§fn deserialize<D>(d: D) -> Result<Value, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(d: D) -> Result<Value, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
Turn any Deserializer into Value, intended to be used
with Value as Deserializer.
Source§impl<'de> Deserializer<'de> for Value
impl<'de> Deserializer<'de> for Value
Source§type Error = Error
type Error = Error
Source§fn is_human_readable(&self) -> bool
fn is_human_readable(&self) -> bool
Deserialize implementations should expect to
deserialize their human-readable form. Read moreSource§fn deserialize_any<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_any<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserializer to figure out how to drive the visitor based
on what data type is in the input. Read moreSource§fn deserialize_option<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, Error>where
V: Visitor<'de>,
fn deserialize_option<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, Error>where
V: Visitor<'de>,
Deserialize type is expecting an optional value. Read moreSource§fn deserialize_newtype_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_newtype_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a newtype struct with a
particular name.Source§fn deserialize_enum<V>(
self,
name: &'static str,
_: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_enum<V>(
self,
name: &'static str,
_: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting an enum value with a
particular name and possible variants.Source§fn deserialize_bytes<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_bytes<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a byte array and does not
benefit from taking ownership of buffered data owned by the
Deserializer. Read moreSource§fn deserialize_byte_buf<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_byte_buf<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a byte array and would
benefit from taking ownership of buffered data owned by the
Deserializer. Read moreSource§fn deserialize_bool<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_bool<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a bool value.Source§fn deserialize_i8<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_i8<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting an i8 value.Source§fn deserialize_i16<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_i16<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting an i16 value.Source§fn deserialize_i32<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_i32<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting an i32 value.Source§fn deserialize_i64<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_i64<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting an i64 value.Source§fn deserialize_i128<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_i128<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Source§fn deserialize_u8<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_u8<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a u8 value.Source§fn deserialize_u16<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_u16<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a u16 value.Source§fn deserialize_u32<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_u32<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a u32 value.Source§fn deserialize_u64<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_u64<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a u64 value.Source§fn deserialize_u128<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_u128<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Source§fn deserialize_f32<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_f32<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a f32 value.Source§fn deserialize_f64<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_f64<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a f64 value.Source§fn deserialize_char<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_char<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a char value.Source§fn deserialize_str<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_str<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a string value and does
not benefit from taking ownership of buffered data owned by the
Deserializer. Read moreSource§fn deserialize_string<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_string<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a string value and would
benefit from taking ownership of buffered data owned by the
Deserializer. Read moreSource§fn deserialize_unit<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_unit<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a unit value.Source§fn deserialize_unit_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_unit_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a unit struct with a
particular name.Source§fn deserialize_seq<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_seq<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a sequence of values.Source§fn deserialize_tuple<V>(
self,
len: usize,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_tuple<V>(
self,
len: usize,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a sequence of values and
knows how many values there are without looking at the serialized data.Source§fn deserialize_tuple_struct<V>(
self,
name: &'static str,
len: usize,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_tuple_struct<V>(
self,
name: &'static str,
len: usize,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a tuple struct with a
particular name and number of fields.Source§fn deserialize_map<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_map<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a map of key-value pairs.Source§fn deserialize_struct<V>(
self,
name: &'static str,
fields: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_struct<V>(
self,
name: &'static str,
fields: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting a struct with a particular
name and fields.Source§fn deserialize_identifier<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
fn deserialize_identifier<V>(
self,
visitor: V,
) -> Result<<V as Visitor<'de>>::Value, <Value as Deserializer<'de>>::Error>where
V: Visitor<'de>,
Deserialize type is expecting the name of a struct
field or the discriminant of an enum variant.Source§impl IntoDeserializer<'_, Error> for Value
impl IntoDeserializer<'_, Error> for Value
Source§type Deserializer = Value
type Deserializer = Value
Source§fn into_deserializer(
self,
) -> <Value as IntoDeserializer<'_, Error>>::Deserializer
fn into_deserializer( self, ) -> <Value as IntoDeserializer<'_, Error>>::Deserializer
Source§impl JsonSchema for Value
impl JsonSchema for Value
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(_: &mut SchemaGenerator) -> Schema
fn json_schema(_: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read more