sonobe/frontends/src/noname/utils.rs
frontends/src/noname/utils.rsRaw
1use std::collections::HashMap;
2
3use ark_ff::PrimeField;
4use ark_r1cs_std::{fields::fp::FpVar, R1CSVar};
5use ark_relations::r1cs::SynthesisError;
6use noname::inputs::JsonInputs;
7use serde_json::json;
8
9pub struct NonameInputs(pub JsonInputs);
10
11impl<F: PrimeField> From<(&Vec<F>, String)> for NonameInputs {
12 fn from(value: (&Vec<F>, String)) -> Self {
13 let (values, key) = value;
14 let mut inputs = HashMap::new();
15 if values.is_empty() {
16 NonameInputs(JsonInputs(inputs))
17 } else {
18 let field_elements: Vec<String> = values
19 .iter()
20 .map(|value| {
21 if value.is_zero() {
22 "0".to_string()
23 } else {
24 value.to_string()
25 }
26 })
27 .collect();
28 inputs.insert(key, json!(field_elements));
29 NonameInputs(JsonInputs(inputs))
30 }
31 }
32}
33
34impl NonameInputs {
35 pub fn from_fpvars<F: PrimeField>(
36 value: (&Vec<FpVar<F>>, String),
37 ) -> Result<Self, SynthesisError> {
38 let (values, key) = value;
39 let mut inputs = HashMap::new();
40 if values.is_empty() {
41 Ok(NonameInputs(JsonInputs(inputs)))
42 } else {
43 let field_elements: Vec<String> = values
44 .iter()
45 .map(|var| {
46 let value = var.value()?;
47 if value.is_zero() {
48 Ok("0".to_string())
49 } else {
50 Ok(value.to_string())
51 }
52 })
53 .collect::<Result<Vec<String>, SynthesisError>>()?;
54 inputs.insert(key, json!(field_elements));
55 Ok(NonameInputs(JsonInputs(inputs)))
56 }
57 }
58}