43 lines
766 B
Rust
43 lines
766 B
Rust
// build-pass
|
|
// compile-flags: -C opt-level=3
|
|
|
|
#![crate_type = "lib"]
|
|
|
|
pub trait Archive {
|
|
type Archived;
|
|
type Resolver;
|
|
|
|
fn resolve(resolver: Self::Resolver, out: *mut Self::Archived);
|
|
}
|
|
|
|
pub type Archived<T> = <T as Archive>::Archived;
|
|
pub type Resolver<T> = <T as Archive>::Resolver;
|
|
|
|
pub struct Record<'a> {
|
|
_payload: &'a [u8],
|
|
}
|
|
|
|
pub struct ArchivedRecord<'a>
|
|
where
|
|
&'a [u8]: Archive,
|
|
{
|
|
_payload: Archived<&'a [u8]>,
|
|
}
|
|
|
|
pub struct RecordResolver<'a>
|
|
where
|
|
&'a [u8]: Archive,
|
|
{
|
|
_payload: Resolver<&'a [u8]>,
|
|
}
|
|
|
|
impl<'a> Archive for Record<'a>
|
|
where
|
|
&'a [u8]: Archive,
|
|
{
|
|
type Archived = ArchivedRecord<'a>;
|
|
type Resolver = RecordResolver<'a>;
|
|
|
|
fn resolve(_resolver: Self::Resolver, _out: *mut Self::Archived) {}
|
|
}
|