mod core;
use std::collections::HashMap;
use crate::core::{file::Lang, prng::PRNG};
pub struct Resrap {
language_graph: HashMap<String, Lang>,
}
impl Resrap {
pub fn new() -> Self {
Resrap {
language_graph: HashMap::new(),
}
}
pub fn parse_grammar(&mut self, name: String, grammar: String) -> Result<(), String> {
let mut lang = Lang::new();
let err = lang.parse_string(grammar);
self.language_graph.insert(name.clone(), lang);
err
}
pub fn parse_grammar_file(&mut self, name: String, location: String) -> Result<(), String> {
let mut lang = Lang::new();
let err = lang.parse_file(location);
self.language_graph.insert(name.clone(), lang);
err
}
pub fn generate_random(
&self,
name: &str,
starting_node: String,
tokens: usize,
) -> Result<String, &str> {
let prng = PRNG::new(0);
self.language_graph
.get(name)
.unwrap()
.get_graph()
.unwrap()
.walk_graph(prng, starting_node, tokens)
}
pub fn generate_with_seeded(
&self,
name: &str,
starting_node: String,
seed: u64,
tokens: usize,
) -> Result<String, &str> {
let prng = PRNG::new(seed);
self.language_graph
.get(name)
.unwrap()
.get_graph()
.unwrap()
.walk_graph(prng, starting_node, tokens)
}
}
impl Default for Resrap {
fn default() -> Self {
Self::new()
}
}