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日

#858Rust 模式

Download history 9/week @ 2024-04-14 11/week @ 2024-04-21 7/week @ 2024-04-28 4/week @ 2024-05-05 12/week @ 2024-05-12 16/week @ 2024-05-19 13/week @ 2024-05-26 12/week @ 2024-06-02 10/week @ 2024-06-09 7/week @ 2024-06-16 274/week @ 2024-06-23 32/week @ 2024-06-30 31/week @ 2024-07-07 17/week @ 2024-07-14 7/week @ 2024-07-21 37/week @ 2024-07-28

92 每月下载量
用于 6 crates

MIT/Apache

54KB
1.5K SLoC

SOD: 面向服务设计

概述

此 crate 提供了 ServiceMutServiceAsyncService 特性及其相关实用工具,以促进 面向服务设计。此库中的特性和工具提供了具体指南,以帮助实现成功的服务导向设计。

在此 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