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}