feat: Add support for Date <-> chrono::DateTime<Utc>
This commit is contained in:
parent
e607bc158e
commit
2b2841e8d3
10 changed files with 107 additions and 7 deletions
examples/napi
|
@ -9,12 +9,22 @@ version = "0.1.0"
|
|||
crate-type = ["cdylib"]
|
||||
|
||||
[dependencies]
|
||||
chrono = "0.4"
|
||||
futures = "0.3"
|
||||
napi = {path = "../../crates/napi", default-features = false, features = ["tokio_fs", "napi8", "tokio_rt", "serde-json", "async", "experimental", "latin1"]}
|
||||
napi-derive = {path = "../../crates/macro", features = ["type-def"]}
|
||||
napi = { path = "../../crates/napi", default-features = false, features = [
|
||||
"tokio_fs",
|
||||
"napi8",
|
||||
"tokio_rt",
|
||||
"serde-json",
|
||||
"async",
|
||||
"experimental",
|
||||
"latin1",
|
||||
"chrono_date",
|
||||
] }
|
||||
napi-derive = { path = "../../crates/macro", features = ["type-def"] }
|
||||
serde = "1"
|
||||
serde_derive = "1"
|
||||
serde_json = "1"
|
||||
|
||||
[build-dependencies]
|
||||
napi-build = {path = "../../crates/build"}
|
||||
napi-build = { path = "../../crates/build" }
|
||||
|
|
|
@ -41,6 +41,8 @@ Generated by [AVA](https://avajs.dev).
|
|||
export function readFile(callback: (arg0: Error | undefined, arg1?: string | undefined | null) => void): void␊
|
||||
export function returnJsFunction(): (...args: any[]) => any␊
|
||||
export function dateToNumber(input: Date): number␊
|
||||
export function chronoDateToMillis(input: Date): number␊
|
||||
export function chronoDateAdd1Minute(input: Date): Date␊
|
||||
export function eitherStringOrNumber(input: string | number): number␊
|
||||
export function returnEither(input: number): string | number␊
|
||||
export function either3(input: string | number | boolean): number␊
|
||||
|
|
Binary file not shown.
|
@ -83,7 +83,9 @@ import {
|
|||
testSerdeRoundtrip,
|
||||
createObjWithProperty,
|
||||
dateToNumber,
|
||||
chronoDateToMillis,
|
||||
derefUint8Array,
|
||||
chronoDateAdd1Minute,
|
||||
} from '../'
|
||||
|
||||
test('export const', (t) => {
|
||||
|
@ -564,3 +566,12 @@ Napi5Test('Date test', (t) => {
|
|||
const fixture = new Date('2016-12-24')
|
||||
t.is(dateToNumber(fixture), fixture.valueOf())
|
||||
})
|
||||
|
||||
Napi5Test('Date to chrono test', (t) => {
|
||||
const fixture = new Date('2022-02-09T19:31:55.396Z')
|
||||
t.is(chronoDateToMillis(fixture), fixture.getTime())
|
||||
t.deepEqual(
|
||||
chronoDateAdd1Minute(fixture),
|
||||
new Date(fixture.getTime() + 60 * 1000),
|
||||
)
|
||||
})
|
||||
|
|
2
examples/napi/index.d.ts
vendored
2
examples/napi/index.d.ts
vendored
|
@ -31,6 +31,8 @@ export function optionOnly(callback: (arg0?: string | undefined | null) => void)
|
|||
export function readFile(callback: (arg0: Error | undefined, arg1?: string | undefined | null) => void): void
|
||||
export function returnJsFunction(): (...args: any[]) => any
|
||||
export function dateToNumber(input: Date): number
|
||||
export function chronoDateToMillis(input: Date): number
|
||||
export function chronoDateAdd1Minute(input: Date): Date
|
||||
export function eitherStringOrNumber(input: string | number): number
|
||||
export function returnEither(input: number): string | number
|
||||
export function either3(input: string | number | boolean): number
|
||||
|
|
|
@ -1,6 +1,17 @@
|
|||
use chrono::{Duration, Utc};
|
||||
use napi::bindgen_prelude::*;
|
||||
|
||||
#[napi]
|
||||
fn date_to_number(input: Date) -> Result<f64> {
|
||||
input.value_of()
|
||||
}
|
||||
|
||||
#[napi]
|
||||
fn chrono_date_to_millis(input: chrono::DateTime<Utc>) -> i64 {
|
||||
input.timestamp_millis()
|
||||
}
|
||||
|
||||
#[napi]
|
||||
fn chrono_date_add_1_minute(input: chrono::DateTime<Utc>) -> chrono::DateTime<Utc> {
|
||||
input + Duration::minutes(1)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue