s7-client 0.1.2

copt protocols
Documentation
use crate::codec::S7Encoder;
use crate::error::*;
use bytes::BytesMut;
use copt::{CoptFrame};
use tokio_util::codec::Encoder;
use tpkt::TpktFrame;

#[derive(Default)]
pub struct S7SetupBuilder {
    pdu_ref: u16,
    max_amq_calling: u16,
    max_amq_called: u16,
    pdu_length: u16,
}

impl S7SetupBuilder {
    pub fn pdu_ref(mut self, pdu_ref: u16) -> Self {
        self.pdu_ref = pdu_ref;
        self
    }
    pub fn max_amq_calling(mut self, max_amq_calling: u16) -> Self {
        self.max_amq_calling = max_amq_calling;
        self
    }
    pub fn max_amq_called(mut self, max_amq_called: u16) -> Self {
        self.max_amq_called = max_amq_called;
        self
    }
    pub fn pdu_length(mut self, pdu_length: u16) -> Self {
        self.pdu_length = pdu_length;
        self
    }

    pub fn build(self) -> Result<BytesMut> {
        let frame = TpktFrame::new(
            CoptFrame::builder_of_dt_data(
                s7_comm::Frame::job_setup(self.pdu_ref)
                    .pdu_length(self.pdu_length)
                    .max_amq_calling(self.max_amq_calling)
                    .max_amq_called(self.max_amq_called)
                    .build(),
            )
            .build(0, true),
        );
        let mut dst = BytesMut::new();
        let mut encoder = S7Encoder::default();
        encoder.encode(frame, &mut dst)?;
        Ok(dst)
    }
}