use std::ffi::CStr;
use exif_sys::*;
use bits::*;
use internal::*;
pub struct Tag {
inner: ExifTag,
}
impl FromLibExif<ExifTag> for Tag {
fn from_libexif(tag: ExifTag) -> Tag {
Tag { inner: tag }
}
}
impl Tag {
pub fn name(&self, ifd: IFD) -> &'static str {
let ptr = unsafe { exif_tag_get_name_in_ifd(self.inner, ifd.to_libexif()) };
assert!(!ptr.is_null());
let cstr = unsafe { CStr::from_ptr(ptr) };
cstr.to_str().expect("invalid UTF-8")
}
pub fn title(&self, ifd: IFD) -> &'static str {
let ptr = unsafe { exif_tag_get_title_in_ifd(self.inner, ifd.to_libexif()) };
assert!(!ptr.is_null());
let cstr = unsafe { CStr::from_ptr(ptr) };
cstr.to_str().expect("invalid UTF-8")
}
pub fn description(&self, ifd: IFD) -> &'static str {
let ptr = unsafe { exif_tag_get_description_in_ifd(self.inner, ifd.to_libexif()) };
assert!(!ptr.is_null());
let cstr = unsafe { CStr::from_ptr(ptr) };
cstr.to_str().expect("invalid UTF-8")
}
pub fn support_level(&self, ifd: IFD, encoding: DataEncoding) -> SupportLevel {
let support_level = unsafe {
exif_tag_get_support_level_in_ifd(self.inner,
ifd.to_libexif(),
encoding.to_libexif())
};
SupportLevel::from_libexif(support_level)
}
}