XML#

ElementTreeXmlCodec(
    root_name="root",
    encoding="utf-8",
)

XmlBody(
    codec=...,
    name="xml",
    media_type="application/xml",
)

XmlResponse(codec=...)

XmlBody используется как Annotated marker. XmlResponse является primitive extractor-ом и передаётся в Extracted(Model, using=XmlResponse(codec), media_type="application/xml").

ElementTreeXmlCodec сериализует semantic primitives из model registry и разбирает повторяющиеся elements в lists. Scalars возвращаются как text, после чего окончательные типы строит выбранный model adapter.

Собственный codec реализует serialize(value) -> bytes и parse(body) -> object. Ошибка decode становится MalformedResponseError; codec не должен возвращать частичный результат.