protocol

# `http_body_codec_protocol`

Protocol for portable HTTP body codecs.

Availability:
`logtalk_load(http_core(loader))`
Author: Paulo Moura
Version: 1:0:0
Date: 2026-06-26
Compilation flags:
`static`
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

## Public predicates

### `media_types/1`

Returns the media types supported by this body codec.

Compilation flags:
`static`
Template:
`media_types(MediaTypes)`
Mode and number of proofs:
`media_types(-list(atom))` - `one`

### `encode_body/4`

Encodes a semantic payload term for the given media type and options into a normalized HTTP body term.

Compilation flags:
`static`
Template:
`encode_body(MediaType,Payload,Options,Body)`
Mode and number of proofs:
`encode_body(+atom,++term,+list(compound),-compound)` - `one_or_error`
Exceptions:
`MediaType` is not a valid HTTP media type atom:
`domain_error(http_media_type,MediaType)`
`Payload` is not valid for `MediaType`:
`domain_error(http_body_payload,Payload)`
`Options` is not a valid HTTP body options list:
`domain_error(http_body_options,Options)`
`Body` is not a valid normalized HTTP body term:
`domain_error(http_body,Body)`

### `decode_body/4`

Decodes a normalized HTTP body term for the given media type and options into a semantic payload term.

Compilation flags:
`static`
Template:
`decode_body(MediaType,Body,Options,Payload)`
Mode and number of proofs:
`decode_body(+atom,++compound,+list(compound),-term)` - `one_or_error`
Exceptions:
`MediaType` is not a valid HTTP media type atom:
`domain_error(http_media_type,MediaType)`
`Body` is not a valid normalized HTTP body term:
`domain_error(http_body,Body)`
`Options` is not a valid HTTP body options list:
`domain_error(http_body_options,Options)`
`Payload` cannot be decoded from `Body` for `MediaType`:
`domain_error(http_body_payload,Payload)`

## Protected predicates

(none)

## Private predicates

(none)

## Operators

(none)