Crate datafusion_proto_common

Crate datafusion_proto_common 

Source
Expand description

Serialize / Deserialize DataFusion Primitive Types to bytes

This crate provides support for serializing and deserializing the following structures to and from bytes:

  1. ScalarValue’s

Internally, this crate is implemented by converting the common types to protocol buffers using prost.

§Version Compatibility

The serialized form are not guaranteed to be compatible across DataFusion versions. A plan serialized with one version of DataFusion may not be able to deserialized with a different version.

§See Also

The binary format created by this crate supports the full range of DataFusion plans, but is DataFusion specific. See datafusion-substrait for a crate which can encode many DataFusion plans using the substrait.io standard.

§Example: Serializing ScalarValues

// Create a new ScalarValue
let val = ScalarValue::UInt64(Some(3));
let mut buffer = BytesMut::new();
let protobuf: protobuf_common::ScalarValue = match val {
    ScalarValue::UInt64(Some(val)) => protobuf_common::ScalarValue {
        value: Some(protobuf_common::scalar_value::Value::Uint64Value(val)),
    },
    _ => unreachable!(),
};

protobuf
    .encode(&mut buffer)
    .map_err(|e| plan_datafusion_err!("Error encoding protobuf as bytes: {e}"))?;
// Convert it to bytes (for sending over the network, etc.)
let bytes: Bytes = buffer.into();

let protobuf = protobuf_common::ScalarValue::decode(bytes).map_err(|e| {
    plan_datafusion_err!("Error decoding ScalarValue as protobuf: {e}")
})?;
// Decode bytes from somewhere (over network, etc.) back to ScalarValue
let decoded_val: ScalarValue = match protobuf.value {
    Some(protobuf_common::scalar_value::Value::Uint64Value(val)) => {
        ScalarValue::UInt64(Some(val))
    }
    _ => unreachable!(),
};
assert_eq!(val, decoded_val);

Re-exports§

pub use from_proto::Error as FromProtoError;
pub use generated::datafusion_proto_common as protobuf_common;
pub use to_proto::Error as ToProtoError;
pub use generated::datafusion_proto_common::*;

Modules§

common
from_proto
generated
to_proto