kimchi_napi/wrappers/
feature_flags.rs1use kimchi::circuits::{
2 constraints::FeatureFlags,
3 lookup::lookups::{LookupFeatures, LookupPatterns},
4};
5use napi_derive::napi;
6
7#[napi(object, js_name = "WasmFeatureFlags")]
8#[derive(Clone, Copy, Debug, Default)]
9pub struct NapiFeatureFlags {
10 #[napi(js_name = "range_check0")]
11 pub range_check0: bool,
12 #[napi(js_name = "range_check1")]
13 pub range_check1: bool,
14 #[napi(js_name = "foreign_field_add")]
15 pub foreign_field_add: bool,
16 #[napi(js_name = "foreign_field_mul")]
17 pub foreign_field_mul: bool,
18 pub xor: bool,
19 pub rot: bool,
20 pub lookup: bool,
21 #[napi(js_name = "runtime_tables")]
22 pub runtime_tables: bool,
23}
24
25impl From<FeatureFlags> for NapiFeatureFlags {
26 fn from(value: FeatureFlags) -> Self {
27 let LookupPatterns {
28 xor,
29 lookup,
30 range_check,
31 foreign_field_mul,
32 } = value.lookup_features.patterns;
33
34 Self {
35 range_check0: value.range_check0,
36 range_check1: value.range_check1,
37 foreign_field_add: value.foreign_field_add,
38 foreign_field_mul: value.foreign_field_mul,
39 xor: value.xor,
40 rot: value.rot,
41 lookup: lookup || range_check || foreign_field_mul || xor,
42 runtime_tables: value.lookup_features.uses_runtime_tables,
43 }
44 }
45}
46
47impl From<NapiFeatureFlags> for FeatureFlags {
48 fn from(value: NapiFeatureFlags) -> Self {
49 FeatureFlags {
50 range_check0: value.range_check0,
51 range_check1: value.range_check1,
52 foreign_field_add: value.foreign_field_add,
53 foreign_field_mul: value.foreign_field_mul,
54 xor: value.xor,
55 rot: value.rot,
56 lookup_features: LookupFeatures {
57 patterns: LookupPatterns {
58 xor: value.lookup && value.xor,
59 lookup: value.lookup,
60 range_check: value.lookup && (value.range_check0 || value.range_check1),
61 foreign_field_mul: value.lookup && value.foreign_field_mul,
62 },
63 joint_lookup_used: value.lookup,
64 uses_runtime_tables: value.runtime_tables,
65 },
66 }
67 }
68}