pub trait ProjectionDecoder {
type Output;
// Required methods
fn selection_query(&self) -> SelectionQuery;
fn decode_one(&self, value: Value) -> Result<Self::Output, CoolError>;
// Provided methods
fn decode_many(&self, value: Value) -> Result<Vec<Self::Output>, CoolError> { ... }
fn decode_page(&self, value: Value) -> Result<Page<Self::Output>, CoolError> { ... }
}