interstice_abi/schema/
table.rs1use 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}