use alloc::vec::Vec;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(bound(serialize = "F: Serialize, C: Serialize"))]
#[serde(bound(deserialize = "F: Deserialize<'de>, C: Deserialize<'de>"))]
pub struct TranscriptData<F, C> {
fields: Vec<F>,
commitments: Vec<C>,
}
impl<F, C> TranscriptData<F, C> {
pub fn new(fields: Vec<F>, commitments: Vec<C>) -> Self {
Self { fields, commitments }
}
pub fn fields(&self) -> &[F] {
&self.fields
}
pub fn commitments(&self) -> &[C] {
&self.commitments
}
pub fn as_slices(&self) -> (&[F], &[C]) {
(&self.fields, &self.commitments)
}
pub fn into_parts(self) -> (Vec<F>, Vec<C>) {
(self.fields, self.commitments)
}
pub fn size_in_bytes(&self) -> usize {
size_of_val(self.fields.as_slice()) + size_of_val(self.commitments.as_slice())
}
}