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