use std::borrow::Cow;
use std::ffi::CStr;
#[repr(C)]
pub struct Storage {
inner: ::gphoto2::CameraStorageInformation,
}
impl Storage {
pub fn base_dir(&self) -> Option<Cow<str>> {
if self.inner.fields & ::gphoto2::GP_STORAGEINFO_BASE != 0 {
Some(unsafe {
String::from_utf8_lossy(CStr::from_ptr(self.inner.basedir.as_ptr()).to_bytes())
})
}
else {
None
}
}
pub fn label(&self) -> Option<Cow<str>> {
if self.inner.fields & ::gphoto2::GP_STORAGEINFO_LABEL != 0 {
Some(unsafe {
String::from_utf8_lossy(CStr::from_ptr(self.inner.label.as_ptr()).to_bytes())
})
}
else {
None
}
}
pub fn description(&self) -> Option<Cow<str>> {
if self.inner.fields & ::gphoto2::GP_STORAGEINFO_DESCRIPTION != 0 {
Some(unsafe {
String::from_utf8_lossy(CStr::from_ptr(self.inner.description.as_ptr()).to_bytes())
})
}
else {
None
}
}
pub fn storage_type(&self) -> Option<StorageType> {
if self.inner.fields & ::gphoto2::GP_STORAGEINFO_STORAGETYPE != 0 {
Some(match self.inner.storage_type {
::gphoto2::GP_STORAGEINFO_ST_FIXED_ROM => StorageType::FixedRom,
::gphoto2::GP_STORAGEINFO_ST_REMOVABLE_ROM => StorageType::RemovableRom,
::gphoto2::GP_STORAGEINFO_ST_FIXED_RAM => StorageType::FixedRam,
::gphoto2::GP_STORAGEINFO_ST_REMOVABLE_RAM => StorageType::RemoveableRam,
::gphoto2::GP_STORAGEINFO_ST_UNKNOWN => StorageType::Unknown,
})
}
else {
None
}
}
pub fn filesystem_type(&self) -> Option<FilesystemType> {
if self.inner.fields & ::gphoto2::GP_STORAGEINFO_FILESYSTEMTYPE != 0 {
Some(match self.inner.fstype {
::gphoto2::GP_STORAGEINFO_FST_GENERICFLAT => FilesystemType::Flat,
::gphoto2::GP_STORAGEINFO_FST_GENERICHIERARCHICAL => FilesystemType::Hierarchical,
::gphoto2::GP_STORAGEINFO_FST_DCF => FilesystemType::DCF,
::gphoto2::GP_STORAGEINFO_FST_UNDEFINED => FilesystemType::Unknown,
})
}
else {
None
}
}
pub fn access_type(&self) -> Option<AccessType> {
if self.inner.fields & ::gphoto2::GP_STORAGEINFO_ACCESS != 0 {
Some(match self.inner.access {
::gphoto2::GP_STORAGEINFO_AC_READWRITE => AccessType::ReadWrite,
::gphoto2::GP_STORAGEINFO_AC_READONLY => AccessType::ReadOnly,
::gphoto2::GP_STORAGEINFO_AC_READONLY_WITH_DELETE => AccessType::ReadDelete,
})
}
else {
None
}
}
pub fn capacity_kbytes(&self) -> Option<u64> {
if self.inner.fields & ::gphoto2::GP_STORAGEINFO_MAXCAPACITY != 0 {
Some(self.inner.capacitykbytes)
}
else {
None
}
}
pub fn free_kbytes(&self) -> Option<u64> {
if self.inner.fields & ::gphoto2::GP_STORAGEINFO_FREESPACEKBYTES != 0 {
Some(self.inner.freekbytes)
}
else {
None
}
}
pub fn free_images(&self) -> Option<u64> {
if self.inner.fields & ::gphoto2::GP_STORAGEINFO_FREESPACEIMAGES != 0 {
Some(self.inner.freeimages)
}
else {
None
}
}
}
#[derive(Debug)]
pub enum StorageType {
FixedRom,
RemovableRom,
FixedRam,
RemoveableRam,
Unknown,
}
#[derive(Debug)]
pub enum FilesystemType {
Flat,
Hierarchical,
DCF,
Unknown,
}
#[derive(Debug)]
pub enum AccessType {
ReadWrite,
ReadDelete,
ReadOnly,
}