pub fn encode_from_read<R: Read, T: Iterator<Item = Vec<u8>>, Q: Iterator<Item = Vec<u8>>>(
targets: Option<&mut T>,
queries: Option<&mut Q>,
conn_in: &mut R,
opts: EncodeOpts,
) -> Result<Vec<u8>, Box<dyn Error>>Expand description
Parse all plain-text pseudoalignments from Read and encode to memory.
ยงUsage
use ahda::{encode_from_read, decode_from_read_to_write};
use ahda::EncodeOpts;
use ahda::Format;
use std::io::{Cursor, Seek};
// Mock inputs
let targets = vec!["chr.fasta".as_bytes().to_vec(), "plasmid.fasta".as_bytes().to_vec(), "virus.fasta".as_bytes().to_vec()];
let queries = vec![b"r1".to_vec(), b"r2".to_vec(), b"r651903".to_vec(), b"r7543".to_vec(), b"r16".to_vec()];
let name = "sample".as_bytes().to_vec();
let mut opts = EncodeOpts::default();
opts.accession = name;
opts.encode_query_names = true;
// Have this input data:
// 3 r7543 chr.fasta:virus.fasta
// 0 r1 virus.fasta
// 4 r16 chr.fasta:plasmid.fasta:virus.fasta
// 2 r651903
//
let mut input_bytes: Vec<u8> = Vec::new();
input_bytes.append(&mut b"0\tr1\tvirus.fasta\n".to_vec());
input_bytes.append(&mut b"3\tr7543\tchr.fasta:virus.fasta\n".to_vec());
input_bytes.append(&mut b"4\tr16\tchr.fasta:plasmid.fasta:virus.fasta\n".to_vec());
input_bytes.append(&mut b"2\tr651903\t\n".to_vec());
let mut input: Cursor<Vec<u8>> = Cursor::new(input_bytes.clone());
let mut it = queries.into_iter();
let mut t_it = targets.into_iter();
let output = encode_from_read(Some(&mut t_it), Some(&mut it), &mut input, opts).unwrap();
// `output` can be decoded to get the original data back
let mut encoded: Cursor<Vec<u8>> = Cursor::new(output);
let mut decoded: Cursor<Vec<u8>> = Cursor::new(Vec::new());
decode_from_read_to_write(Format::Metagraph, &mut encoded, &mut decoded).unwrap();
assert_eq!(decoded.get_ref(), &input_bytes);