11 个版本
0.3.4 | 2024年6月26日 |
---|---|
0.3.3 | 2024年6月26日 |
0.3.2 | 2023年11月1日 |
0.3.1 | 2023年10月15日 |
0.1.3 | 2023年4月20日 |
#858 在 Rust 模式
92 每月下载量
用于 6 crates
54KB
1.5K SLoC
SOD: 面向服务设计
概述
此 crate 提供了 Service
、MutService
和 AsyncService
特性及其相关实用工具,以促进 面向服务设计。此库中的特性和工具提供了具体指南,以帮助实现成功的服务导向设计。
在此 crate 的上下文中,服务只是一个接受输入并产生结果的特质。可以使用此 crate 中找到的 ServiceChain
将特质组合或链接在一起。
此 crate 本身不提供在网络上公开服务或促进服务发现的机制。这些实现细节将在 sod-*
crates 中提供,通常只是封装其他开源库,将它们公开为服务。相反,此 crate 提供了定义服务的核心机制,并确保它们在库级别上相互可互操作。
示例
use sod::{Service, ServiceChain};
// define a service, which adds a constant number to the input, producing the result as output
struct AddService {
n: usize,
}
impl AddService {
pub fn new(n: usize) -> Self {
Self { n }
}
}
impl Service for AddService {
type Input = usize;
type Output = usize;
type Error = ();
fn process(&self, input: usize) -> Result<usize, ()> {
Ok(input + self.n)
}
}
// chain together multiple add services, where each service's output is processed as the next service's input
let chain = ServiceChain::start(AddService::new(1))
.next(AddService::new(2))
.next(AddService::new(4))
.end();
// pass 100 to the service chain, which should result in `100 + 1 + 2 + 4 = 107`
let result = chain.process(100).unwrap();
assert_eq!(107, result);
依赖项
~255–700KB
~17K SLoC