1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use fluvio_protocol::{
    Encoder, Decoder,
    record::Record,
    link::smartmodule::{
        SmartModuleTransformRuntimeError, SmartModuleInitRuntimeError,
        SmartModuleLookbackRuntimeError,
    },
};

/// A type used to return processed records and/or an error from a SmartModule
#[derive(Debug, Default, Encoder, Decoder)]
pub struct SmartModuleOutput {
    /// The successfully processed output Records
    pub successes: Vec<Record>,
    /// Any runtime error if one was encountered
    pub error: Option<SmartModuleTransformRuntimeError>,
}

impl SmartModuleOutput {
    pub fn new(successes: Vec<Record>) -> Self {
        Self {
            successes,
            error: None,
        }
    }

    pub fn with_error(
        successes: Vec<Record>,
        error: Option<SmartModuleTransformRuntimeError>,
    ) -> Self {
        Self { successes, error }
    }
}

/// A type used to return processed records and/or an error from an Aggregate SmartModule
#[derive(Debug, Default, Encoder, Decoder)]
pub struct SmartModuleAggregateOutput {
    /// The base output required by all SmartModules
    pub base: SmartModuleOutput,
    #[fluvio(min_version = 16)]
    pub accumulator: Vec<u8>,
}

impl SmartModuleAggregateOutput {
    pub fn new(base: SmartModuleOutput, accumulator: Vec<u8>) -> Self {
        Self { base, accumulator }
    }
}

/// A type used to return processed records and/or an error from a SmartModule
#[derive(Debug, Default, Encoder, Decoder)]
pub struct SmartModuleInitOutput {
    /// Any runtime error if one was encountered
    pub error: SmartModuleInitRuntimeError,
}

/// A type used to return an error from a SmartModule Lookback
#[derive(Debug, Default, Encoder, Decoder)]
pub struct SmartModuleLookbackOutput {
    /// Any runtime error if one was encountered
    pub error: SmartModuleLookbackRuntimeError,
}