Crate sansio_codec

Crate sansio_codec 

Source
Expand description

§SansIO Codec - Protocol Codecs for SansIO

sansio-codec provides reusable codec implementations for the sansio ecosystem, including frame decoders, string codecs, and transport abstractions.

§Features

  • Frame Decoders: Line-based frame decoders for parsing delimited streams
  • String Codecs: UTF-8 string encoding/decoding
  • Transport Abstractions: Tagged message types with transport metadata
  • Sans-IO Design: Pure protocol logic without I/O dependencies

§Quick Start

[dependencies]
sansio-codec = "0.0.8"

§Building a Pipeline with Codecs

use sansio::Pipeline;
use sansio_codec::{
    LineBasedFrameDecoder, TaggedByteToMessageCodec, TaggedStringCodec, TerminatorType,
};
use sansio_transport::{TaggedBytesMut, TaggedString};

let mut pipeline = Pipeline::<TaggedBytesMut, TaggedString>::new();

// Add line-based frame decoder
let frame_decoder = TaggedByteToMessageCodec::new(Box::new(
    LineBasedFrameDecoder::new(8192, true, TerminatorType::BOTH)
));
pipeline.add_back(frame_decoder);

// Add string codec
pipeline.add_back(TaggedStringCodec::new());

// Add your business logic handler
// pipeline.add_back(your_handler);

pipeline.finalize();

For shared pipelines (e.g., UDP servers), use RcPipeline:

use sansio::RcPipeline;
use sansio_codec::{TaggedByteToMessageCodec, TaggedStringCodec};
use sansio_transport::{TaggedBytesMut, TaggedString};
use std::rc::Rc;

let mut pipeline = RcPipeline::<TaggedBytesMut, TaggedString>::new();
// ... add handlers ...
pipeline.finalize();
let pipeline = Rc::new(pipeline);  // Now shareable

§Modules

§Transport Context

The transport module provides tagged message types that carry metadata:

use sansio_transport::{TransportContext, TaggedBytesMut, TransportProtocol};
use std::time::Instant;
use bytes::BytesMut;

let msg = TaggedBytesMut {
    now: Instant::now(),
    transport: TransportContext {
        local_addr: "127.0.0.1:8080".parse().unwrap(),
        peer_addr: "127.0.0.1:1234".parse().unwrap(),
        transport_protocol: TransportProtocol::TCP,
        ecn: None,
    },
    message: BytesMut::from("Hello"),
};

Re-exports§

pub use byte_to_message_decoder::LineBasedFrameDecoder;
pub use byte_to_message_decoder::MessageDecoder;
pub use byte_to_message_decoder::TaggedByteToMessageCodec;
pub use byte_to_message_decoder::TerminatorType;
pub use string_codec::TaggedStringCodec;

Modules§

byte_to_message_decoder
Byte-to-message frame decoders for parsing delimited streams Handlers for converting byte to message
string_codec
UTF-8 string encoding/decoding handlers Handlers for converting between TaggedBytesMut and TaggedString