#[non_exhaustive]pub struct PrivateExtensionLayout {
pub tag: u8,
pub extension_layout_id: u64,
pub extension_data: Vec<u8>,
}Expand description
Descriptor for an implementation-private extension layout.
Tags in 0xF0–0xFE are reserved for implementation-private layouts.
Tensors using these tags MUST NOT be exchanged between independent
implementations unless both parties have agreed on the layout semantics out
of band.
An extension layout descriptor carries:
- an
extension_layout_id(uint64): implementation-defined unique identifier, extension_data(Vec<u8>): opaque layout-specific metadata.
The Unknown variant (for unrecognized tags in permissive mode) is
separate; see [UnknownLayout].
§Examples
use hurray_core::layout::{LayoutDescriptor, PrivateExtensionLayout};
let layout = LayoutDescriptor::PrivateExtension(
PrivateExtensionLayout::new(0xF0, 0xDEAD_BEEF_CAFE_0001, vec![1, 2, 3]).unwrap(),
);
assert_eq!(layout.tag(), 0xF0);
// buffer_count is None — unknown for private layouts.
assert!(layout.buffer_count().is_none());Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.tag: u8The layout tag byte (0xF0–0xFE).
extension_layout_id: u64Implementation-defined unique identifier for this extension layout.
extension_data: Vec<u8>Opaque layout-specific metadata.
Implementations§
Source§impl PrivateExtensionLayout
impl PrivateExtensionLayout
Sourcepub fn new(
tag: u8,
extension_layout_id: u64,
extension_data: Vec<u8>,
) -> Result<Self>
pub fn new( tag: u8, extension_layout_id: u64, extension_data: Vec<u8>, ) -> Result<Self>
Creates a new PrivateExtensionLayout, validating that tag is in
the private-extension range 0xF0–0xFE.
§Errors
Returns Error::InvalidLayout if tag is outside 0xF0–0xFE.
§Examples
use hurray_core::layout::PrivateExtensionLayout;
let p = PrivateExtensionLayout::new(0xF1, 42, vec![0xAB, 0xCD]).unwrap();
assert_eq!(p.tag, 0xF1);
// Tags outside the private range are rejected.
assert!(PrivateExtensionLayout::new(0x01, 0, vec![]).is_err());
assert!(PrivateExtensionLayout::new(0xFF, 0, vec![]).is_err());Trait Implementations§
Source§impl Clone for PrivateExtensionLayout
impl Clone for PrivateExtensionLayout
Source§fn clone(&self) -> PrivateExtensionLayout
fn clone(&self) -> PrivateExtensionLayout
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for PrivateExtensionLayout
impl Debug for PrivateExtensionLayout
impl Eq for PrivateExtensionLayout
Source§impl Hash for PrivateExtensionLayout
impl Hash for PrivateExtensionLayout
Source§impl PartialEq for PrivateExtensionLayout
impl PartialEq for PrivateExtensionLayout
Source§fn eq(&self, other: &PrivateExtensionLayout) -> bool
fn eq(&self, other: &PrivateExtensionLayout) -> bool
Tests for
self and other values to be equal, and is used by ==.impl StructuralPartialEq for PrivateExtensionLayout
Auto Trait Implementations§
impl Freeze for PrivateExtensionLayout
impl RefUnwindSafe for PrivateExtensionLayout
impl Send for PrivateExtensionLayout
impl Sync for PrivateExtensionLayout
impl Unpin for PrivateExtensionLayout
impl UnsafeUnpin for PrivateExtensionLayout
impl UnwindSafe for PrivateExtensionLayout
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more