use std::error::Error;
use std::fs::File;
use std::io::Write;
use std::io::{BufRead, BufReader};
#[tokio::main]
pub async fn metadata_fetch(
pathname: &str,
searchpath: &str,
searchstring: &str,
) -> Result<String, Box<dyn Error>> {
let file = File::open(pathname).expect("file not found");
let fileread = BufReader::new(file);
let mut refseqvec: Vec<(String, String)> = Vec::new();
let mut ccdsvec: Vec<(String, String)> = Vec::new();
for i in fileread.lines() {
let line = i.expect("file not found");
let linevec = line.split("\t").collect::<Vec<_>>();
if linevec[3] == "RefSeq_dna" {
refseqvec.push((linevec[0].to_string(), linevec[2].to_string()));
} else if linevec[3] == "CCDS" {
ccdsvec.push((linevec[0].to_string(), linevec[2].to_string()));
}
}
if searchstring == "refseq" {
let mut returnvec: Vec<(String, String)> = Vec::new();
for i in refseqvec.iter() {
if i.0 == searchpath {
returnvec.push((i.0.clone(), i.1.clone()));
}
}
let mut filewrite = File::create("refseq.txt").expect("file not present");
writeln!(filewrite, "The refseq for the ensembl have been").expect("file not found");
for i in returnvec.iter() {
writeln!(filewrite, "{}\t{}\n", i.0, i.1).expect("file not found");
}
} else if searchstring == "CCDS" {
let mut ccdsreturnvec: Vec<(String, String)> = Vec::new();
for i in ccdsvec.iter() {
if i.0 == searchpath {
ccdsreturnvec.push((i.0.clone(), i.1.clone()));
}
}
let mut filewrite = File::create("refseq.txt").expect("file not present");
writeln!(filewrite, "The refseq for the ensembl have been").expect("file not found");
for i in ccdsreturnvec.iter() {
writeln!(filewrite, "{}\t{}\n", i.0, i.1).expect("file not found");
}
}
Ok("The string has been parsed".to_string())
}