1use serde::{Deserialize, Serialize};
2use uuid::Uuid;
3use crate::vector::Vector;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct Point {
8 pub id: PointId,
9 pub vector: Vector,
10 pub payload: Option<serde_json::Value>,
11}
12
13#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
14#[serde(untagged)]
15pub enum PointId {
16 String(String),
17 Uuid(Uuid),
18 Integer(u64),
19}
20
21impl std::fmt::Display for PointId {
22 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23 match self {
24 PointId::String(s) => write!(f, "{}", s),
25 PointId::Uuid(u) => write!(f, "{}", u),
26 PointId::Integer(i) => write!(f, "{}", i),
27 }
28 }
29}
30
31impl From<String> for PointId {
32 fn from(s: String) -> Self {
33 PointId::String(s)
34 }
35}
36
37impl From<u64> for PointId {
38 fn from(i: u64) -> Self {
39 PointId::Integer(i)
40 }
41}
42
43impl From<Uuid> for PointId {
44 fn from(u: Uuid) -> Self {
45 PointId::Uuid(u)
46 }
47}
48
49impl Point {
50 #[inline]
51 #[must_use]
52 pub fn new(id: PointId, vector: Vector, payload: Option<serde_json::Value>) -> Self {
53 Self {
54 id,
55 vector,
56 payload,
57 }
58 }
59
60 #[inline]
61 #[must_use]
62 pub fn with_payload(mut self, payload: serde_json::Value) -> Self {
63 self.payload = Some(payload);
64 self
65 }
66}
67