Skip to main content

encode_from_read

Function encode_from_read 

Source
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);