melior/ir/attribute/
type.rs1use super::{Attribute, AttributeLike};
2use crate::{
3 Error,
4 ir::{Type, TypeLike},
5};
6use mlir_sys::{MlirAttribute, mlirTypeAttrGet, mlirTypeAttrGetValue};
7
8#[derive(Clone, Copy, Hash)]
10pub struct TypeAttribute<'c> {
11 attribute: Attribute<'c>,
12}
13
14impl<'c> TypeAttribute<'c> {
15 pub fn new(r#type: Type<'c>) -> Self {
17 unsafe { Self::from_raw(mlirTypeAttrGet(r#type.to_raw())) }
18 }
19
20 pub fn value(&self) -> Type<'c> {
22 unsafe { Type::from_raw(mlirTypeAttrGetValue(self.to_raw())) }
23 }
24}
25
26attribute_traits!(TypeAttribute, is_type, "type");
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31 use crate::test::create_test_context;
32
33 #[test]
34 fn value() {
35 let context = create_test_context();
36 let r#type = Type::index(&context);
37
38 assert_eq!(TypeAttribute::new(r#type).value(), r#type);
39 }
40}