1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use utils::{_string}; use std::ffi::{CString}; use gdal_major_object::MajorObject; use utils::{_last_cpl_err, _last_null_pointer_err}; use errors::*; use gdal_sys::{gdal, cpl_error}; pub trait Metadata: MajorObject { fn description(&self) -> Result<String>{ let c_res = unsafe { gdal::GDALGetDescription(self.gdal_object_ptr())}; if c_res.is_null() { return Err(_last_null_pointer_err("GDALGetDescription").into()); } Ok(_string(c_res)) } fn metadata_item(&self, key: &str, domain: &str) -> Option<String> { if let Ok(c_key) = CString::new(key.to_owned()) { if let Ok(c_domain) = CString::new(domain.to_owned()){ let c_res = unsafe { gdal::GDALGetMetadataItem(self.gdal_object_ptr(), c_key.as_ptr(), c_domain.as_ptr())}; if !c_res.is_null() { return Some(_string(c_res)); } } } None } fn set_metadata_item(&mut self, key: &str, value: &str, domain: &str) -> Result<()> { let c_key = CString::new(key.to_owned())?; let c_domain = CString::new(domain.to_owned())?; let c_value = CString::new(value.to_owned())?; let c_res = unsafe { gdal::GDALSetMetadataItem(self.gdal_object_ptr(), c_key.as_ptr(), c_value.as_ptr(), c_domain.as_ptr())}; if c_res != cpl_error::CPLErr::CE_None { return Err(_last_cpl_err(c_res).into()); } Ok(()) } }