docs_account_and_basins/
docs_account_and_basins.rs1use futures::StreamExt;
6use s2_sdk::{
7 S2,
8 types::{
9 AccessTokenScopeInput, BasinMatcher, BasinName, CreateBasinInput, CreateStreamInput,
10 DeleteBasinInput, DeleteStreamInput, IssueAccessTokenInput, ListAllStreamsInput,
11 ListBasinsInput, ListStreamsInput, OperationGroupPermissions, ReadWritePermissions,
12 S2Config, StreamMatcher,
13 },
14};
15
16#[tokio::main]
17async fn main() -> Result<(), Box<dyn std::error::Error>> {
18 let access_token = std::env::var("S2_ACCESS_TOKEN")?;
19 let basin_name: BasinName = std::env::var("S2_BASIN")?.parse()?;
20
21 let client = S2::new(S2Config::new(access_token))?;
22
23 let basins = client.list_basins(ListBasinsInput::new()).await?;
26
27 client
29 .create_basin(CreateBasinInput::new("my-events".parse()?))
30 .await?;
31
32 let config = client.get_basin_config("my-events".parse()?).await?;
34
35 client
37 .delete_basin(DeleteBasinInput::new("my-events".parse()?))
38 .await?;
39 println!("Basins: {:?}, config: {:?}", basins, config);
41
42 let basin = client.basin(basin_name);
43
44 let streams = basin
47 .list_streams(ListStreamsInput::new().with_prefix("user-".parse()?))
48 .await?;
49
50 basin
53 .create_stream(CreateStreamInput::new("user-actions".parse()?))
54 .await?;
55
56 let config = basin.get_stream_config("user-actions".parse()?).await?;
58
59 basin
61 .delete_stream(DeleteStreamInput::new("user-actions".parse()?))
62 .await?;
63 println!("Streams: {:?}, config: {:?}", streams, config);
65
66 let tokens = client.list_access_tokens(Default::default()).await?;
69
70 let result = client
72 .issue_access_token(
73 IssueAccessTokenInput::new(
74 "user-1234-rw-token".parse()?,
75 AccessTokenScopeInput::from_op_group_perms(
76 OperationGroupPermissions::new()
77 .with_stream(ReadWritePermissions::read_write()),
78 )
79 .with_basins(BasinMatcher::Prefix("".parse()?)) .with_streams(StreamMatcher::Prefix("users/1234/".parse()?)),
81 )
82 .with_expires_at("2027-01-01T00:00:00Z".parse()?),
83 )
84 .await?;
85
86 client
88 .revoke_access_token("user-1234-rw-token".parse()?)
89 .await?;
90 println!("Tokens: {:?}, issued: {:?}", tokens, result);
92
93 client
95 .issue_access_token(IssueAccessTokenInput::new(
96 "restricted-token".parse()?,
97 AccessTokenScopeInput::from_op_group_perms(
98 OperationGroupPermissions::new().with_stream(ReadWritePermissions::read_only()),
99 )
100 .with_basins(BasinMatcher::Exact("production".parse()?))
101 .with_streams(StreamMatcher::Prefix("logs/".parse()?)),
102 ))
103 .await?;
104 if false {
108 let mut stream = basin.list_all_streams(ListAllStreamsInput::new());
111 while let Some(info) = stream.next().await {
112 let info = info?;
113 println!("{}", info.name);
114 }
115 let input = ListAllStreamsInput::new().with_prefix("events/".parse()?);
120 let mut stream = basin.list_all_streams(input);
121 while let Some(info) = stream.next().await {
122 println!("{}", info?.name);
123 }
124 let input = ListAllStreamsInput::new().with_include_deleted(true);
129 let mut stream = basin.list_all_streams(input);
130 while let Some(info) = stream.next().await {
131 let info = info?;
132 println!("{} {:?}", info.name, info.deleted_at);
133 }
134 }
136
137 Ok(())
138}