use crate::metadata::token::Token;
pub struct Document {
pub rid: u32,
pub token: Token,
pub offset: usize,
pub name: String,
pub hash_algorithm: uguid::Guid,
pub hash: Vec<u8>,
pub language: uguid::Guid,
}
impl Document {
#[must_use]
pub fn new(
rid: u32,
token: Token,
offset: usize,
name: String,
hash_algorithm: uguid::Guid,
hash: Vec<u8>,
language: uguid::Guid,
) -> Self {
Self {
rid,
token,
offset,
name,
hash_algorithm,
hash,
language,
}
}
#[must_use]
pub fn has_hash(&self) -> bool {
!self.hash.is_empty()
}
#[must_use]
pub fn is_csharp(&self) -> bool {
const CSHARP_GUID: uguid::Guid = uguid::guid!("3F5162F8-07C6-11D3-9053-00C04FA302A1");
self.language == CSHARP_GUID
}
#[must_use]
pub fn is_visual_basic(&self) -> bool {
const VB_GUID: uguid::Guid = uguid::guid!("3A12D0B8-C26C-11D0-B442-00A0244A1DD2");
self.language == VB_GUID
}
#[must_use]
pub fn is_fsharp(&self) -> bool {
const FSHARP_GUID: uguid::Guid = uguid::guid!("AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3");
self.language == FSHARP_GUID
}
#[must_use]
pub fn hash_algorithm_name(&self) -> &'static str {
const SHA1_GUID: uguid::Guid = uguid::guid!("FF1816EC-AA5E-4D10-87F7-6F4963833460");
const SHA256_GUID: uguid::Guid = uguid::guid!("8829D00F-11B8-4213-878B-770E8597AC16");
match self.hash_algorithm {
SHA1_GUID => "SHA-1",
SHA256_GUID => "SHA-256",
_ => "Unknown",
}
}
#[must_use]
pub fn language_name(&self) -> &'static str {
if self.is_csharp() {
"C#"
} else if self.is_visual_basic() {
"Visual Basic"
} else if self.is_fsharp() {
"F#"
} else {
"Unknown"
}
}
}