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
use std::{
	ffi::c_void,
	fmt,
};

use crate::{
	dnn::{DictValue, LayerParams},
	prelude::*,
	Result,
	sys,
};

impl fmt::Debug for DictValue {
	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
		let mut d = f.debug_struct("DictValue");
		d.field("is_int", &self.is_int().map_err(|_| fmt::Error)?)
			.field("is_real", &self.is_real().map_err(|_| fmt::Error)?)
			.field("is_string", &self.is_string().map_err(|_| fmt::Error)?);
		if self.is_string().map_err(|_| fmt::Error)? {
			d.field("value", &self.get_str(-1).map_err(|_| fmt::Error)?);
		} else if self.is_int().map_err(|_| fmt::Error)? {
			d.field("value", &self.get_i64(-1).map_err(|_| fmt::Error)?);
		} else if self.is_real().map_err(|_| fmt::Error)? {
			d.field("value", &self.get_f64(-1).map_err(|_| fmt::Error)?);
		}
		d.finish()
	}
}

impl LayerParams {
	pub fn default() -> Result<Self> {
		extern "C" { fn cv_dnn_LayerParams_LayerParams() -> sys::Result<*mut c_void>; }
		unsafe { cv_dnn_LayerParams_LayerParams() }
			.into_result()
			.map(|ptr| unsafe { LayerParams::from_raw(ptr) })
	}
}