update rustler 0.23.0 -> 0.34.0
This commit is contained in:
1
native/xler_native/.gitignore
vendored
Normal file
1
native/xler_native/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/target
|
||||
90
native/xler_native/Cargo.lock
generated
90
native/xler_native/Cargo.lock
generated
@@ -1,11 +1,22 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "adler32"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "0.7.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.3.4"
|
||||
@@ -74,12 +85,15 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.3.1"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
|
||||
dependencies = [
|
||||
"unicode-segmentation",
|
||||
]
|
||||
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
||||
|
||||
[[package]]
|
||||
name = "inventory"
|
||||
version = "0.3.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767"
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
@@ -119,11 +133,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.23"
|
||||
version = "1.0.86"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "51ef7cd2518ead700af67bf9d1a658d90b6037d77110fd9c0445429d0ba1c6c9"
|
||||
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
|
||||
dependencies = [
|
||||
"unicode-xid",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -138,42 +152,61 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.7"
|
||||
version = "1.0.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
|
||||
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustler"
|
||||
version = "0.23.0"
|
||||
name = "regex"
|
||||
version = "1.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ac79e5fcfae809c16ff8da548daa291933b7ec8d66eadc197cdccec46891625"
|
||||
checksum = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.6.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
|
||||
|
||||
[[package]]
|
||||
name = "rustler"
|
||||
version = "0.34.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e94bdfa68c0388cbd725f1ca54e975956482c262599e5cced04a903eec918b7f"
|
||||
dependencies = [
|
||||
"inventory",
|
||||
"rustler_codegen",
|
||||
"rustler_sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustler_codegen"
|
||||
version = "0.23.0"
|
||||
version = "0.34.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "10d303c303a145c1f3d2a2993527128badb9500101070c55e36ef9bb2417666a"
|
||||
checksum = "996dc019acb78b91b4e0c1bd6fa2cd509a835d309de762dc15213b97eac399da"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"inventory",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.72",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustler_sys"
|
||||
version = "2.1.0"
|
||||
version = "2.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9fb96034ff33723615fd19223d58c987c1f6476342e83557a6e467ef95f83bda"
|
||||
checksum = "3914a75a147934353c3772a77b774c79fdf80ba84e8347f52a50df0c164aaff2"
|
||||
dependencies = [
|
||||
"regex",
|
||||
"unreachable",
|
||||
]
|
||||
|
||||
@@ -194,6 +227,17 @@ dependencies = [
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.72"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.20"
|
||||
@@ -211,14 +255,14 @@ checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 1.0.42",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-segmentation"
|
||||
version = "1.6.0"
|
||||
name = "unicode-ident"
|
||||
version = "1.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
|
||||
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
|
||||
@@ -9,6 +9,6 @@ path = "src/lib.rs"
|
||||
crate-type = ["dylib"]
|
||||
|
||||
[dependencies]
|
||||
rustler = "0.23.0"
|
||||
rustler = "0.34.0"
|
||||
lazy_static = "1.4"
|
||||
calamine = "0.18.0"
|
||||
@@ -1,77 +1,61 @@
|
||||
#[macro_use] extern crate rustler;
|
||||
extern crate lazy_static;
|
||||
extern crate calamine;
|
||||
extern crate lazy_static;
|
||||
extern crate rustler;
|
||||
|
||||
use rustler::{Env, NifResult, Encoder, Term, SchedulerFlags};
|
||||
use calamine::{Reader, open_workbook_auto};
|
||||
use calamine::Error as CaError;
|
||||
use calamine::{open_workbook_auto, Reader};
|
||||
|
||||
rustler::init!("Elixir.Xler.Native");
|
||||
mod atoms {
|
||||
rustler_atoms! {
|
||||
atom ok;
|
||||
atom error;
|
||||
rustler::atoms! {
|
||||
ok,
|
||||
error,
|
||||
|
||||
// Posix
|
||||
atom enoent; // File does not exist
|
||||
atom eacces; // Permission denied
|
||||
atom epipe; // Broken pipe
|
||||
atom eexist; // File exists
|
||||
enoent, // File does not exist
|
||||
eacces, // Permission denied
|
||||
epipe, // Broken pipe
|
||||
eexist, // File exists
|
||||
}
|
||||
}
|
||||
|
||||
rustler_export_nifs! {
|
||||
"Elixir.Xler.Native",
|
||||
[
|
||||
("parse", 2, parse, SchedulerFlags::DirtyCpu),
|
||||
("worksheets", 1, worksheets, SchedulerFlags::DirtyCpu)
|
||||
],
|
||||
None
|
||||
}
|
||||
type Sheet = Vec<Vec<String>>;
|
||||
type SheetName = String;
|
||||
type Worksheets = Vec<SheetName>;
|
||||
|
||||
fn io_error_to_term<'a>(env: Env<'a>, err: &CaError) -> Term<'a> {
|
||||
fn io_error_to_term(err: &CaError) -> String {
|
||||
let error = match err {
|
||||
_ => format!("{}", err).encode(env),
|
||||
_ => format!("{}", err),
|
||||
};
|
||||
|
||||
(atoms::error(), error).encode(env)
|
||||
error
|
||||
}
|
||||
|
||||
fn worksheets<'a>(env: Env<'a>, args: &[Term<'a>]) -> NifResult<Term<'a>> {
|
||||
let filename: String = args[0].decode()?;
|
||||
|
||||
#[rustler::nif(schedule = "DirtyCpu")]
|
||||
fn worksheets(filename: String) -> Result<Worksheets, String> {
|
||||
match open_workbook_auto(&filename) {
|
||||
Err(ref error) => return Ok(io_error_to_term(env, error)),
|
||||
Ok(ref inner) => Ok((atoms::ok(), inner.sheet_names().to_owned()).encode(env)),
|
||||
Err(ref error) => Err(io_error_to_term(error)),
|
||||
Ok(ref inner) => Ok(inner.sheet_names().to_owned()),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn parse<'a>(env: Env<'a>, args: &[Term<'a>]) -> NifResult<Term<'a>> {
|
||||
let filename: String = args[0].decode()?;
|
||||
let sheetname: String = args[1].decode()?;
|
||||
|
||||
#[rustler::nif(schedule = "DirtyCpu")]
|
||||
fn parse(filename: String, sheetname: SheetName) -> Result<Sheet, String> {
|
||||
let mut excel = match open_workbook_auto(&filename) {
|
||||
Err(ref error) => return Ok(io_error_to_term(env, error)),
|
||||
Err(ref error) => return Err(io_error_to_term(error)),
|
||||
Ok(inner) => inner,
|
||||
};
|
||||
|
||||
if let Some(Ok(range)) = excel.worksheet_range(&sheetname) {
|
||||
let row: Vec<(Vec<String>)> = range
|
||||
.rows()
|
||||
.into_iter()
|
||||
.enumerate()
|
||||
.map(|(_i, col)|
|
||||
col
|
||||
.iter()
|
||||
.map(|c|
|
||||
c.to_string()
|
||||
)
|
||||
.collect::<Vec<_>>()
|
||||
)
|
||||
.collect::<Vec<_>>();
|
||||
let row: Sheet = range
|
||||
.rows()
|
||||
.into_iter()
|
||||
.enumerate()
|
||||
.map(|(_i, col)| col.iter().map(|c| c.to_string()).collect::<Vec<_>>())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
Ok((atoms::ok(), row.encode(env)).encode(env))
|
||||
Ok(row)
|
||||
} else {
|
||||
Ok((atoms::error(), "Couldnt find the worksheet").encode(env))
|
||||
Err("Couldnt find the worksheet".to_string())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user