[][src]Derive Macro rkyv::Archive

#[derive(Archive)]
{
    // Attributes available to this derive:
    #[archive]
    #[recursive]
}

Derives Archive for the labeled type.

Additional arguments can be specified using the #[archive(...)] attribute:

  • copy: Implements ArchiveCopy as well as Archive. Only suitable for types that can be directly archived.
  • derive(...): Adds a #[derive(...)] attribute to the archived type.
  • name, name = "...": Exposes the archived type with the given name. If used without a name assignment, uses the name "Archived" + name.

This derive macro automatically adds a type bound field: Archive for each field type. This can cause an overflow while evaluating trait bounds if the structure eventually references its own type, as the implementation of Archive for a struct depends on each field type implementing it as well. Adding the attribute #[recursive] to a field will suppress this trait bound and allow recursive structures. This may be too coarse for some types, in which case Archive will have to be implemented manually.

Example

use rkyv::Archive;

#[derive(Archive)]
enum Node<T> {
    Nil,
    Cons(T, #[recursive] Box<Node<T>>),
}