validator: extend grpc

This commit is contained in:
2025-07-18 21:14:17 -07:00
parent 3c21d8948a
commit bdfe16ed39
4 changed files with 59 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
use rust_grpc::validator::{ScriptId,ScriptPolicyId};
#[derive(Debug)]
#[expect(dead_code)]
pub enum SingleItemError<Items>{
DuplicateItems(Items),
Other(tonic::Status),
}
impl<Items> std::fmt::Display for SingleItemError<Items>
where
Items:std::fmt::Debug
{
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
write!(f,"{self:?}")
}
}
impl<Items> std::error::Error for SingleItemError<Items> where Items:std::fmt::Debug{}
pub type ScriptSingleItemError=SingleItemError<Vec<ScriptId>>;
pub type ScriptPolicySingleItemError=SingleItemError<Vec<ScriptPolicyId>>;

View File

@@ -1,4 +1,6 @@
pub mod error;
pub mod mapfixes;
pub mod operations;
pub mod scripts;

View File

@@ -1,4 +1,5 @@
use crate::endpoint;
use crate::grpc::error::ScriptPolicySingleItemError;
use rust_grpc::validator::*;
pub type ValidatorScriptPolicyServiceClient=rust_grpc::validator::validator_script_policy_service_client::ValidatorScriptPolicyServiceClient<tonic::transport::channel::Channel>;
#[derive(Clone)]
@@ -13,4 +14,21 @@ impl Service{
}
endpoint!(create,ScriptPolicyCreate,ScriptPolicyId);
endpoint!(list,ScriptPolicyListRequest,ScriptPolicyListResponse);
pub async fn get_from_hash(&self,hash:u64)->Result<Option<ScriptPolicy>,ScriptPolicySingleItemError>{
let policies=self.list(ScriptPolicyListRequest{
filter:Some(ScriptPolicyFilter{
from_script_hash:Some(hash),
to_script_id:None,
policy:None,
}),
page:Some(Pagination{
number:1,
size:2,
}),
}).await.map_err(ScriptPolicySingleItemError::Other)?;
if 1<policies.script_policies.len(){
return Err(ScriptPolicySingleItemError::DuplicateItems(policies.script_policies.into_iter().map(|item|ScriptPolicyId{id:item.id}).collect()));
}
Ok(policies.script_policies.into_iter().next())
}
}

View File

@@ -1,4 +1,5 @@
use crate::endpoint;
use crate::grpc::error::ScriptSingleItemError;
use rust_grpc::validator::*;
pub type ValidatorScriptsServiceClient=rust_grpc::validator::validator_script_service_client::ValidatorScriptServiceClient<tonic::transport::channel::Channel>;
#[derive(Clone)]
@@ -14,4 +15,23 @@ impl Service{
endpoint!(create,ScriptCreate,ScriptId);
endpoint!(get,ScriptId,Script);
endpoint!(list,ScriptListRequest,ScriptListResponse);
pub async fn get_from_hash(&self,hash:u64)->Result<Option<Script>,ScriptSingleItemError>{
let policies=self.list(ScriptListRequest{
filter:Some(ScriptFilter{
hash:Some(hash),
name:None,
source:None,
resource_type:None,
resource_id:None,
}),
page:Some(Pagination{
number:1,
size:2,
}),
}).await.map_err(ScriptSingleItemError::Other)?;
if 1<policies.scripts.len(){
return Err(ScriptSingleItemError::DuplicateItems(policies.scripts.into_iter().map(|item|ScriptId{id:item.id}).collect()));
}
Ok(policies.scripts.into_iter().next())
}
}