Skip to main content

interstice_abi/schema/
table.rs

1use std::collections::HashMap;
2
3use crate::{IntersticeTypeDef, Row, interstice_type_def::FieldDef, validate_value};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Deserialize, Serialize)]
7pub struct TableSchema {
8    pub name: String,
9    pub type_name: String,
10    pub visibility: TableVisibility,
11    pub fields: Vec<FieldDef>,
12    pub primary_key: FieldDef,
13}
14
15#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
16pub enum TableVisibility {
17    Public,
18    Private,
19}
20
21impl TableSchema {
22    pub fn validate_row(
23        &self,
24        row: &Row,
25        type_definitions: &HashMap<String, IntersticeTypeDef>,
26    ) -> bool {
27        if !validate_value(
28            &row.primary_key,
29            &self.primary_key.field_type,
30            type_definitions,
31        ) {
32            return false;
33        }
34        if row.entries.len() != self.fields.len() {
35            return false;
36        }
37        for (entry, ty) in row.entries.iter().zip(self.fields.iter()) {
38            if !validate_value(entry, &ty.field_type, type_definitions) {
39                return false;
40            }
41        }
42        true
43    }
44}