engula_journal/mem/mod.rs
1// Copyright 2021 The Engula Authors.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15//! A [`Journal`] implementation that stores data in memory.
16//!
17//! [`Journal`]: crate::Journal
18
19mod journal;
20mod stream;
21
22pub use self::{journal::Journal, stream::Stream};
23
24#[cfg(test)]
25mod tests {
26 use futures::TryStreamExt;
27
28 use crate::*;
29
30 #[tokio::test]
31 async fn test() -> Result<()> {
32 let j = mem::Journal::default();
33 let stream = j.create_stream("a").await?;
34 let event = Event {
35 ts: 0.into(),
36 data: vec![1, 2, 3],
37 };
38 stream.append_event(event.clone()).await?;
39 let mut events = stream.read_events(0.into()).await;
40 let got = events.try_next().await?;
41 assert_eq!(got, Some(vec![event]));
42 Ok(())
43 }
44}