Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Add payload codec system to plug into storage wrappers
Signed-off-by: Edwin Yu <[email protected]>
  • Loading branch information
edwinyyyu committed May 4, 2026
commit 22f46920910905772bf7c68fa151c5fc9172d396
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Tests for payload codecs."""
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""Tests for payload codecs."""

from memmachine_server.common.payload_codec.plaintext_payload_codec import (
PlaintextPayloadCodec,
)


def test_plaintext_payload_codec_round_trip() -> None:
codec = PlaintextPayloadCodec()
value = b'{"type":"message","source":"User"}'

encoded = codec.encode(value)
decoded = codec.decode(encoded)

assert encoded == value
assert decoded == value
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
"""Tests for payload codec configuration."""

from memmachine_server.common.payload_codec import (
decode_payload_codec_config,
encode_payload_codec_config,
)
from memmachine_server.common.payload_codec.payload_codec_config import (
PlaintextPayloadCodecConfig,
)


def test_plaintext_payload_codec_config_round_trip() -> None:
config = PlaintextPayloadCodecConfig()

serialized = encode_payload_codec_config(config)
deserialized = decode_payload_codec_config(serialized)

assert deserialized == config
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"""Payload codec exports."""

from .payload_codec import PayloadCodec
from .payload_codec_config import (
PayloadCodecConfig,
decode_payload_codec_config,
encode_payload_codec_config,
)

__all__ = [
"PayloadCodec",
"PayloadCodecConfig",
"decode_payload_codec_config",
"encode_payload_codec_config",
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
"""Shared payload codec abstractions."""

from abc import ABC, abstractmethod


class PayloadCodec(ABC):
"""Byte-level codec for payloads."""

@abstractmethod
def encode(
self,
value: bytes,
) -> bytes:
"""
Encode a payload.

Args:
value (bytes):
Payload bytes to encode.

Returns:
bytes:
Encoded payload bytes.
"""

@abstractmethod
def decode(
self,
value: bytes,
) -> bytes:
"""
Decode a serialized payload.

Args:
value (bytes):
Encoded payload bytes to decode.

Returns:
bytes:
Payload bytes.
"""
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
"""Payload codec configuration models and serialization helpers."""

from collections.abc import Mapping
from typing import Annotated, Literal

from pydantic import (
BaseModel,
Field,
JsonValue,
TypeAdapter,
)


class PlaintextPayloadCodecConfig(BaseModel):
"""Codec config for plaintext-serialized payloads."""

type: Literal["plaintext"] = "plaintext"


PayloadCodecConfigUnion = PlaintextPayloadCodecConfig

PayloadCodecConfig = Annotated[PayloadCodecConfigUnion, Field(discriminator="type")]

_PAYLOAD_CODEC_CONFIG_ADAPTER = TypeAdapter(PayloadCodecConfig)


def encode_payload_codec_config(config: PayloadCodecConfig) -> dict[str, JsonValue]:
"""Encode a codec config to JSON-compatible data."""
return _PAYLOAD_CODEC_CONFIG_ADAPTER.dump_python(config, mode="json")


def decode_payload_codec_config(
encoded: Mapping[str, JsonValue],
) -> PayloadCodecConfig:
"""Decode a codec config from JSON-compatible data."""
return _PAYLOAD_CODEC_CONFIG_ADAPTER.validate_python(encoded)
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
"""Plaintext payload codec."""

from typing import override

from .payload_codec import PayloadCodec


class PlaintextPayloadCodec(PayloadCodec):
"""Codec for plaintext-serialized payloads."""

@override
def encode(self, value: bytes) -> bytes:
return value

@override
def decode(self, value: bytes) -> bytes:
return value
Loading