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