use vala_sys as ffi;
use crate::collections::List;
use crate::object::RawWrapper;
use crate::{
Class, Constant, Delegate, Enum, Field, Interface, Method, Namespace, ObjectTypeSymbol,
Property, Signal, Struct,
};
macro_rules! list_getter {
($(#[$m:meta])* $owner:ty, $name:ident, $elem:ty, $ffi:path) => {
impl $owner {
$(#[$m])*
pub fn $name(&self) -> List<$elem> {
unsafe {
List::from_raw_none($ffi(self.as_raw() as *mut _))
.expect(concat!(stringify!($ffi), " returned null"))
}
}
}
};
}
list_getter!(
Namespace, namespaces, Namespace, ffi::vala_namespace_get_namespaces
);
list_getter!(
Namespace, classes, Class, ffi::vala_namespace_get_classes
);
list_getter!(
Namespace, structs, Struct, ffi::vala_namespace_get_structs
);
list_getter!(
Namespace, interfaces, Interface, ffi::vala_namespace_get_interfaces
);
list_getter!(
Namespace, enums, Enum, ffi::vala_namespace_get_enums
);
list_getter!(
Namespace, methods, Method, ffi::vala_namespace_get_methods
);
list_getter!(
Namespace, fields, Field, ffi::vala_namespace_get_fields
);
list_getter!(
Namespace, constants, Constant, ffi::vala_namespace_get_constants
);
list_getter!(
Namespace, delegates, Delegate, ffi::vala_namespace_get_delegates
);
list_getter!(
ObjectTypeSymbol, methods, Method, ffi::vala_object_type_symbol_get_methods
);
list_getter!(
ObjectTypeSymbol, fields, Field, ffi::vala_object_type_symbol_get_fields
);
list_getter!(
ObjectTypeSymbol, properties, Property, ffi::vala_object_type_symbol_get_properties
);
list_getter!(
ObjectTypeSymbol, signals, Signal, ffi::vala_object_type_symbol_get_signals
);
list_getter!(
ObjectTypeSymbol, constants, Constant, ffi::vala_object_type_symbol_get_constants
);
list_getter!(
ObjectTypeSymbol, classes, Class, ffi::vala_object_type_symbol_get_classes
);
list_getter!(
ObjectTypeSymbol, enums, Enum, ffi::vala_object_type_symbol_get_enums
);