impl CodeFactDatabase {
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn new() -> Self {
Self {
functions: HashMap::new(),
languages: Vec::new(),
capabilities: Vec::new(),
}
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn from_markdown(content: &str) -> Result<Self> {
let mut db = Self::new();
let function_regex = Regex::new(r"(?m)^-\s+([a-zA-Z_][a-zA-Z0-9_]*)\(\)")?;
for caps in function_regex.captures_iter(content) {
let function_name = caps.get(1).expect("internal error").as_str().to_string();
db.functions
.entry(function_name.clone())
.or_default()
.push("".to_string());
}
let language_regex = Regex::new(
r"(?m)^-\s+(Rust|TypeScript|JavaScript|Python|C|C\+\+|Go|Java|Kotlin|Ruby|PHP|Swift|C#|Bash|WASM|Haskell|Elixir|Erlang|OCaml)",
)?;
for caps in language_regex.captures_iter(content) {
let language = caps.get(1).expect("internal error").as_str().to_string();
if !db.languages.contains(&language) {
db.languages.push(language);
}
}
Ok(db)
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn has_function(&self, name: &str) -> bool {
self.functions.contains_key(name)
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn has_language_support(&self, language: &str) -> bool {
self.languages.iter().any(|l| l == language)
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn add_capability(&mut self, capability: String) {
if !self.capabilities.contains(&capability) {
self.capabilities.push(capability);
}
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn has_capability(&self, capability: &str) -> bool {
self.capabilities.iter().any(|c| c == capability)
}
}
impl Default for CodeFactDatabase {
fn default() -> Self {
Self::new()
}
}