Documentation
use super::*;
use crate::{TableIndex, TypeReader};

#[derive(Copy, Clone, PartialEq, PartialOrd, Eq, Ord, Debug)]
pub struct Field(pub Row);

impl Field {
    pub fn name(self, reader: &TypeReader) -> &str {
        reader.str(self.0, 1)
    }

    pub fn sig(self, reader: &TypeReader) -> Blob {
        reader.blob(self.0, 2)
    }

    pub fn flags(self, reader: &TypeReader) -> FieldFlags {
        FieldFlags(reader.u32(self.0, 0))
    }

    pub fn constants(self, reader: &TypeReader) -> impl Iterator<Item = Constant> {
        reader
            .equal_range(
                self.0.file_index,
                TableIndex::Constant,
                1,
                HasConstant::Field(self).encode(),
            )
            .map(Constant)
    }
}