[oden] IO: Load Strings
It's useful. The stock JS way is bad.
This commit is contained in:
parent
89045ccbcc
commit
17c701a7d6
4 changed files with 42 additions and 3 deletions
|
|
@ -77,6 +77,12 @@ impl From<std::io::Error> for Error {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<std::str::Utf8Error> for Error {
|
||||
fn from(e: std::str::Utf8Error) -> Self {
|
||||
Error::ConversionError(e.to_string())
|
||||
}
|
||||
}
|
||||
|
||||
pub type Result<T> = core::result::Result<T, Error>;
|
||||
pub type ValueResult = core::result::Result<Value, Error>;
|
||||
|
||||
|
|
|
|||
12
src/io.ts
12
src/io.ts
|
|
@ -6,6 +6,12 @@ import * as core from "io-core";
|
|||
* @param path The path of the file to load.
|
||||
* @returns The contents of the file.
|
||||
*/
|
||||
export function load(path: string): Promise<ArrayBuffer> {
|
||||
return core.load(path);
|
||||
}
|
||||
export const load = core.load;
|
||||
|
||||
/**
|
||||
* Load the specified file into memory as a string.
|
||||
*
|
||||
* @param path The path of the file to load.
|
||||
* @returns The contents of the file decoded from utf-8.
|
||||
*/
|
||||
export const load_string = core.load_string;
|
||||
|
|
|
|||
|
|
@ -82,6 +82,24 @@ impl IoImpl {
|
|||
|
||||
Ok(value)
|
||||
}
|
||||
|
||||
fn load_string(&self, context: &ContextRef, path: &str) -> ValueResult {
|
||||
let (value, promise) = context.new_promise()?;
|
||||
|
||||
let path = path.to_string();
|
||||
self.thread_pool.execute(Box::new(move || {
|
||||
let path = path;
|
||||
|
||||
let result = resolve_path(&path, &[]).and_then(|p| std::fs::read(p));
|
||||
promise.resolve(move |ctx: &ContextRef| {
|
||||
let result = result?;
|
||||
let string = std::str::from_utf8(&result)?;
|
||||
ctx.new_string(string)
|
||||
});
|
||||
}));
|
||||
|
||||
Ok(value)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct IoAPI {}
|
||||
|
|
@ -97,6 +115,13 @@ impl IoAPI {
|
|||
ctx.new_fn(move |ctx: &ContextRef, p: String| io.load(ctx, &p))?,
|
||||
)?;
|
||||
}
|
||||
{
|
||||
let io = io.clone();
|
||||
builder.export(
|
||||
"load_string",
|
||||
ctx.new_fn(move |ctx: &ContextRef, p: String| io.load_string(ctx, &p))?,
|
||||
)?;
|
||||
}
|
||||
builder.build("io-core")?;
|
||||
Ok(IoAPI {})
|
||||
}
|
||||
|
|
|
|||
2
types/io-core.d.ts
vendored
2
types/io-core.d.ts
vendored
|
|
@ -1,3 +1,5 @@
|
|||
// These are the functions exposed by the native IO module.
|
||||
//
|
||||
export function load(path: string): Promise<ArrayBuffer>;
|
||||
|
||||
export function load_string(path: string): Promise<string>;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue