binaryninja/
similarity.rs1use binaryninjacore_sys::{
6 BNSimilarityAnnotationType, BNSimilarityApplyStatus, BNSimilarityEntityId,
7 BNSimilarityEntityRef, BNSimilarityEntityType, BNSimilarityProviderId, BNSimilarityResultId,
8 BNSimilaritySessionCompletionQuery, BNSimilaritySessionId, BNSimilaritySessionNodeId,
9 BNSimilaritySessionResolverId, BNSimilarityViewType,
10};
11
12pub mod graph;
13pub mod node;
14pub mod provider;
15pub mod render;
16pub mod session;
17
18pub use graph::*;
19pub use node::*;
20pub use provider::*;
21pub use render::*;
22pub use session::*;
23
24pub type SimilarityEntityType = BNSimilarityEntityType;
26
27pub type SimilarityApplyStatus = BNSimilarityApplyStatus;
29
30pub type SimilarityViewType = BNSimilarityViewType;
32
33pub type SimilarityAnnotationType = BNSimilarityAnnotationType;
35
36new_id_type!(
37 SimilarityEntityId,
39 u32,
40 BNSimilarityEntityId,
41 value
42);
43
44new_id_type!(
45 SimilarityResultId,
47 u64,
48 BNSimilarityResultId,
49 value
50);
51
52new_id_type!(
53 SimilaritySessionNodeId,
55 u32,
56 BNSimilaritySessionNodeId,
57 value
58);
59
60new_id_type!(
61 SimilaritySessionId,
63 u32,
64 BNSimilaritySessionId,
65 value
66);
67
68new_id_type!(
69 SimilarityProviderId,
71 u32,
72 BNSimilarityProviderId,
73 value
74);
75
76new_id_type!(
77 SimilaritySessionResolverId,
79 u32,
80 BNSimilaritySessionResolverId,
81 value
82);
83
84#[derive(Debug, Copy, Clone, Default, PartialEq, Eq)]
88pub struct SimilaritySessionCompletionQuery {
89 node_id: Option<SimilaritySessionNodeId>,
90 provider_id: Option<SimilarityProviderId>,
91 resolver_id: Option<SimilaritySessionResolverId>,
92}
93
94impl SimilaritySessionCompletionQuery {
95 pub fn for_session() -> Self {
97 Self::default()
98 }
99 pub fn for_node(node_id: SimilaritySessionNodeId) -> Self {
101 Self {
102 node_id: Some(node_id),
103 ..Self::default()
104 }
105 }
106 pub fn for_provider(provider_id: SimilarityProviderId) -> Self {
108 Self {
109 provider_id: Some(provider_id),
110 ..Self::default()
111 }
112 }
113 pub fn for_resolver(resolver_id: SimilaritySessionResolverId) -> Self {
115 Self {
116 resolver_id: Some(resolver_id),
117 ..Self::default()
118 }
119 }
120 pub fn with_provider(mut self, provider_id: SimilarityProviderId) -> Self {
122 self.provider_id = Some(provider_id);
123 self.resolver_id = None;
124 self
125 }
126 pub fn with_resolver(mut self, resolver_id: SimilaritySessionResolverId) -> Self {
128 self.provider_id = None;
129 self.resolver_id = Some(resolver_id);
130 self
131 }
132
133 pub fn node_id(&self) -> Option<SimilaritySessionNodeId> {
135 self.node_id
136 }
137
138 pub fn provider_id(&self) -> Option<SimilarityProviderId> {
140 self.provider_id
141 }
142
143 pub fn resolver_id(&self) -> Option<SimilaritySessionResolverId> {
145 self.resolver_id
146 }
147}
148
149impl From<SimilaritySessionCompletionQuery> for BNSimilaritySessionCompletionQuery {
150 fn from(value: SimilaritySessionCompletionQuery) -> Self {
151 Self {
152 hasNodeId: value.node_id.is_some(),
153 nodeId: value.node_id.unwrap_or(SimilaritySessionNodeId(0)).into(),
154 hasProviderId: value.provider_id.is_some(),
155 providerId: value.provider_id.unwrap_or(SimilarityProviderId(0)).into(),
156 hasResolverId: value.resolver_id.is_some(),
157 resolverId: value
158 .resolver_id
159 .unwrap_or(SimilaritySessionResolverId(0))
160 .into(),
161 }
162 }
163}
164
165#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
167pub struct SimilarityEntityRef {
168 pub node_id: SimilaritySessionNodeId,
169 pub entity_id: SimilarityEntityId,
170}
171
172#[derive(Debug, Clone, PartialEq, Eq, Hash)]
174pub struct SimilarityEntityInfo {
175 pub entity_type: SimilarityEntityType,
176 pub address: u64,
178 pub name: String,
180}
181
182impl From<BNSimilarityEntityRef> for SimilarityEntityRef {
183 fn from(value: BNSimilarityEntityRef) -> Self {
184 Self {
185 node_id: value.nodeId.into(),
186 entity_id: value.entityId.into(),
187 }
188 }
189}
190
191impl From<SimilarityEntityRef> for BNSimilarityEntityRef {
192 fn from(value: SimilarityEntityRef) -> Self {
193 Self {
194 nodeId: value.node_id.into(),
195 entityId: value.entity_id.into(),
196 }
197 }
198}