validator: extend grpc
This commit is contained in:
19
validation/src/grpc/error.rs
Normal file
19
validation/src/grpc/error.rs
Normal 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>>;
|
||||
@@ -1,4 +1,6 @@
|
||||
|
||||
pub mod error;
|
||||
|
||||
pub mod mapfixes;
|
||||
pub mod operations;
|
||||
pub mod scripts;
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user