1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// =============================================================================
// Copyright (c) 2026 Haixing Hu.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0.
// =============================================================================
//! Semantic marker trait for buffered encoders.
use TranscodeEncodeError;
use Transcoder;
/// Encodes logical values into encoded units over caller-provided buffers.
///
/// `TranscodeEncoder` refines [`Transcoder`] for implementations whose
/// input is the logical value stream and whose output is the encoded unit
/// stream. The trait adds no methods; it exists to make generic bounds
/// distinguish encoding direction from decoding and unit-to-unit conversion.
///
/// The word "buffered" describes the caller-managed buffer and progress model.
/// It does not require the implementor to own an internal buffer. An encoder
/// may retain consumed input internally, but [`Transcoder::transcode`] must
/// consume every visible input value before returning
/// [`crate::TranscodeStatus::Complete`] and must never return
/// [`crate::TranscodeStatus::NeedInput`]. It returns
/// [`crate::TranscodeStatus::NeedOutput`] when more output capacity is needed;
/// [`Transcoder::finish`] emits any retained output after the caller has
/// supplied the complete logical input stream.
///
/// # Examples
///
/// ```
/// use qubit_codec::TranscodeEncoder;
///
/// fn accepts_encoder<E: TranscodeEncoder>(encoder: &E) {
/// let _ = encoder;
/// }
/// ```