Trait immeta::markers::MetadataMarker
[−]
[src]
pub trait MetadataMarker { type Metadata; fn from_generic(gmd: GenericMetadata) -> Result<Self::Metadata, GenericMetadata>; fn from_generic_ref(gmd: &GenericMetadata) -> Option<&Self::Metadata>; fn load<R: ?Sized + BufRead>(r: &mut R) -> Result<Self::Metadata>; fn load_from_seek<R: ?Sized + BufRead + Seek>(r: &mut R) -> Result<Self::Metadata>; fn load_from_file<P: AsRef<Path>>(p: P) -> Result<Self::Metadata>; fn load_from_buf(b: &[u8]) -> Result<Self::Metadata>; }
A marker trait for specific metadata type.
Associated Types
type Metadata
Required Methods
fn from_generic(gmd: GenericMetadata) -> Result<Self::Metadata, GenericMetadata>
Tries to convert the given GenericMetadata
instance into a concrete metadata type.
If the generic value really contains the associated metadata type, then Ok
variant
is returned; otherwise Err
variant containing the original value is returned.
Examples
use immeta::markers::Jpeg; use immeta::formats::jpeg; use immeta::GenericMetadata; let generic = immeta::load_from_file("kitty.jpg").unwrap(); let concrete: Result<jpeg::Metadata, GenericMetadata> = generic.into::<Jpeg>(); assert!(concrete.is_ok());
use immeta::markers::Jpeg; use immeta::formats::jpeg; use immeta::GenericMetadata; let generic = immeta::load_from_file("kitty.png").unwrap(); let concrete: Result<jpeg::Metadata, GenericMetadata> = generic.into::<Jpeg>(); assert!(concrete.is_err());
fn from_generic_ref(gmd: &GenericMetadata) -> Option<&Self::Metadata>
Tries to extract a reference to a concrete metadata type from the given
GenericMetadata
reference.
Behaves similarly to from_generic()
, except using references instead of immediate
values.
Examples
use immeta::markers::Jpeg; use immeta::formats::jpeg; let generic = immeta::load_from_file("kitty.jpg").unwrap(); let concrete: Option<&jpeg::Metadata> = generic.as_ref::<Jpeg>(); assert!(concrete.is_some());
use immeta::markers::Jpeg; use immeta::formats::jpeg; let generic = immeta::load_from_file("kitty.png").unwrap(); let concrete: Option<&jpeg::Metadata> = generic.as_ref::<Jpeg>(); assert!(concrete.is_none());
fn load<R: ?Sized + BufRead>(r: &mut R) -> Result<Self::Metadata>
Attempts to load metadata for an image of a concrete type from the provided reader.
Invokes LoadableMetadata::load()
for the associated metadata type. Use this
method instead of calling load()
on the metadata type directly.
Examples
use std::io::{self, BufReader}; use immeta::markers::{MetadataMarker, Jpeg}; let data = io::stdin(); let metadata = Jpeg::load(&mut data.lock());
fn load_from_seek<R: ?Sized + BufRead + Seek>(r: &mut R) -> Result<Self::Metadata>
Attempts to load metadata for an image of a concrete type from the provided seekable reader.
Invokes LoadableMetadata::load_from_seek()
for the associated metadata type. Use
this method instead of calling load_from_seek()
on the metadata type directly.
Examples
use std::io::{Read, BufReader, Cursor}; use immeta::markers::{MetadataMarker, Jpeg}; let data: Vec<u8> = obtain_image(); let metadata = Jpeg::load(&mut BufReader::new(Cursor::new(data)));
fn load_from_file<P: AsRef<Path>>(p: P) -> Result<Self::Metadata>
Attempts to load metadata for an image of a concrete type from a file identified by the provided path.
Invokes LoadableMetadata::load_from_file()
for the associated metadata type. Use this
method instead of calling load_from_file()
on the metadata type directly.
Examples
use immeta::markers::{MetadataMarker, Jpeg}; let metadata = Jpeg::load_from_file("kitty.jpg");
fn load_from_buf(b: &[u8]) -> Result<Self::Metadata>
Attempts to load metadata for an image of a concrete type from the provided byte buffer.
Invokes LoadableMetadata::load_from_buf()
for the associated metadata type. Use this
method instead of calling load_from_buf()
on the metadata type directly.
Examples
use immeta::markers::{MetadataMarker, Jpeg}; let buf: &[u8] = &[1, 2, 3, 4]; // pretend that this is an actual image let metadata = Jpeg::load_from_buf(buf);