1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//! Builder utility to help creating a new Config
//!
#![allow(dead_code)]
use crate::{Config, DsnpVersion, SchemaConfig, SchemaId};
use std::collections::HashMap;

pub struct ConfigBuilder {
	sdk_max_stale_friendship_days: u32,
	max_graph_page_size_bytes: u32,
	max_page_id: u32,
	max_key_page_size_bytes: u32,
	schema_map: HashMap<SchemaId, SchemaConfig>,
	graph_public_key_schema_id: SchemaId,
	dsnp_versions: Vec<DsnpVersion>,
}

impl ConfigBuilder {
	pub fn new() -> Self {
		Self {
			schema_map: HashMap::new(),
			graph_public_key_schema_id: 0,
			max_graph_page_size_bytes: 1024,
			max_page_id: 16,
			max_key_page_size_bytes: 65536,
			sdk_max_stale_friendship_days: 90,
			dsnp_versions: vec![],
		}
	}

	pub fn with_sdk_max_stale_friendship_days(
		mut self,
		sdk_max_stale_friendship_days: u32,
	) -> Self {
		self.sdk_max_stale_friendship_days = sdk_max_stale_friendship_days;
		self
	}

	pub fn with_max_page_id(mut self, max_page_id: u32) -> Self {
		self.max_page_id = max_page_id;
		self
	}

	pub fn with_max_key_page_size_bytes(mut self, max_key_page_size_bytes: u32) -> Self {
		self.max_key_page_size_bytes = max_key_page_size_bytes;
		self
	}

	pub fn with_max_graph_page_size_bytes(mut self, max_graph_page_size_bytes: u32) -> Self {
		self.max_graph_page_size_bytes = max_graph_page_size_bytes;
		self
	}

	pub fn with_schema(mut self, schema_id: SchemaId, config: SchemaConfig) -> Self {
		self.schema_map.insert(schema_id, config);
		self
	}

	pub fn with_key_pair_schema_id(mut self, schema_id: SchemaId) -> Self {
		self.graph_public_key_schema_id = schema_id;
		self
	}
	pub fn build(self) -> Config {
		Config {
			sdk_max_stale_friendship_days: self.sdk_max_stale_friendship_days,
			graph_public_key_schema_id: self.graph_public_key_schema_id,
			schema_map: self.schema_map,
			max_page_id: self.max_page_id,
			max_key_page_size_bytes: self.max_key_page_size_bytes,
			max_graph_page_size_bytes: self.max_graph_page_size_bytes,
			dsnp_versions: self.dsnp_versions,
		}
	}
}