use chrono::{DateTime, Duration, Utc};
use failure::Error;
use query_interface::{interfaces, vtable_for};
use std::any::Any;
use crate::{
proto::{self, ToProto, Transaction::TransactionBody_oneof_data},
transaction::Transaction,
Client, ContractId, FileId,
};
pub struct TransactionAdminFileDelete {
id: FileId,
exp: DateTime<Utc>,
}
interfaces!(
TransactionAdminFileDelete: dyn Any,
dyn ToProto<TransactionBody_oneof_data>
);
impl TransactionAdminFileDelete {
pub fn new(client: &Client, id: FileId) -> Transaction<Self> {
Transaction::new(
client,
Self {
id,
exp: Utc::now() + Duration::minutes(1),
},
)
}
}
impl Transaction<TransactionAdminFileDelete> {
pub fn expire_at(&mut self, time: DateTime<Utc>) -> &mut Self {
self.inner().exp = time;
self
}
}
impl ToProto<TransactionBody_oneof_data> for TransactionAdminFileDelete {
fn to_proto(&self) -> Result<TransactionBody_oneof_data, Error> {
let mut data = proto::AdminDelete::AdminDeleteTransactionBody::new();
data.set_fileID(self.id.to_proto()?);
data.set_expirationTime(self.exp.to_proto()?);
Ok(TransactionBody_oneof_data::adminDelete(data))
}
}
pub struct TransactionAdminContractDelete {
id: ContractId,
exp: DateTime<Utc>,
}
interfaces!(
TransactionAdminContractDelete: dyn Any,
dyn ToProto<TransactionBody_oneof_data>
);
impl TransactionAdminContractDelete {
pub fn new(client: &Client, id: ContractId) -> Transaction<Self> {
Transaction::new(
client,
Self {
id,
exp: Utc::now() + Duration::minutes(1),
},
)
}
}
impl Transaction<TransactionAdminContractDelete> {
pub fn expire_at(&mut self, time: DateTime<Utc>) -> &mut Self {
self.inner().exp = time;
self
}
}
impl ToProto<TransactionBody_oneof_data> for TransactionAdminContractDelete {
fn to_proto(&self) -> Result<TransactionBody_oneof_data, Error> {
let mut data = proto::AdminDelete::AdminDeleteTransactionBody::new();
data.set_contractID(self.id.to_proto()?);
data.set_expirationTime(self.exp.to_proto()?);
Ok(TransactionBody_oneof_data::adminDelete(data))
}
}