num2exr 0.1.1

Creates an exr image from numbers
Documentation
use core::str::FromStr;

use std::io::{BufRead, BufReader, Read};

use exr::prelude::Vec2;

pub fn pos2val1d<F, T>(getter: &F, width: usize, alt: T, pos: Vec2<usize>) -> T
where
    F: Fn(usize) -> Option<T>,
    T: Copy,
{
    let x: usize = pos.0;
    let y: usize = pos.1;
    let wy: usize = width * y;
    let ix: usize = wy + x;
    getter(ix).unwrap_or(alt)
}

pub fn strings2vec_fn<I, F, T>(strings: I, conv: F) -> Vec<T>
where
    I: Iterator<Item = String>,
    F: Fn(&str) -> T,
{
    strings.map(|s| conv(s.as_str())).collect()
}

pub fn strings2vec<I, T>(strings: I, alt: Option<T>) -> Vec<T>
where
    I: Iterator<Item = String>,
    T: FromStr + Copy,
{
    strings
        .flat_map(|s| str::parse(s.as_str()).ok().or(alt))
        .collect()
}

pub fn read2vec<R, T>(rdr: R, alt: Option<T>) -> Vec<T>
where
    R: Read,
    T: FromStr + Copy,
{
    let br = BufReader::new(rdr);
    let lines = br.lines();
    lines
        .flat_map(|rslt| rslt.ok().and_then(|s| str::parse(s.as_str()).ok().or(alt)))
        .collect()
}