use napi::bindgen_prelude::*;
use napi_derive::napi;
#[napi(object)]
pub struct BlockRangeOptions {
pub code: String,
pub lang: Option<String>,
pub path: Option<String>,
pub line: u32,
}
#[napi(object)]
pub struct BlockRange {
pub start_line: u32,
pub end_line: u32,
}
impl From<pi_ast::block::BlockRange> for BlockRange {
fn from(value: pi_ast::block::BlockRange) -> Self {
Self { start_line: value.start_line, end_line: value.end_line }
}
}
#[napi]
pub fn block_range_at(options: BlockRangeOptions) -> Result<Option<BlockRange>> {
pi_ast::block::block_range_at(pi_ast::block::BlockRangeOptions {
code: options.code,
lang: options.lang,
path: options.path,
line: options.line,
})
.map(|range| range.map(Into::into))
.map_err(|error| Error::from_reason(error.to_string()))
}