melior/ir/attribute/
type.rs

1use super::{Attribute, AttributeLike};
2use crate::{
3    Error,
4    ir::{Type, TypeLike},
5};
6use mlir_sys::{MlirAttribute, mlirTypeAttrGet, mlirTypeAttrGetValue};
7
8/// A type attribute.
9#[derive(Clone, Copy, Hash)]
10pub struct TypeAttribute<'c> {
11    attribute: Attribute<'c>,
12}
13
14impl<'c> TypeAttribute<'c> {
15    /// Creates a type attribute.
16    pub fn new(r#type: Type<'c>) -> Self {
17        unsafe { Self::from_raw(mlirTypeAttrGet(r#type.to_raw())) }
18    }
19
20    /// Returns a type value.
21    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}