sqlite-requests 0.0.2

Represent SQLite queries and executes as request objects
use execute::BulkExecute;
use execute::Execute;
use execute::ExecuteResult;
use proto::ProtoExecuteRequest;
use proto::ProtoExecuteResponse;
use proto::ProtoExecuteResult;
use proto::ProtoBulkExecuteRequest;
use proto::ProtoBulkExecuteResponse;

impl From<Execute> for ProtoExecuteRequest {
    fn from(execute: Execute) -> Self {
        let mut proto_execute_request = ProtoExecuteRequest::new();
        proto_execute_request.set_sql(execute.sql);
        proto_execute_request.set_queued_parameters(execute.queued_parameters.into());
        proto_execute_request
    }
}

impl From<ProtoExecuteRequest> for Execute {
    fn from(mut proto_execute_request: ProtoExecuteRequest) -> Self {
        Execute {
            sql: proto_execute_request.take_sql(),
            queued_parameters: proto_execute_request.take_queued_parameters().into(),
        }
    }
}

impl From<Vec<ExecuteResult>> for ProtoExecuteResponse {
    fn from(vec_execute_result: Vec<ExecuteResult>) -> Self {
        let mut proto_execute_response = ProtoExecuteResponse::new();
        let vec_proto_execute_result: Vec<ProtoExecuteResult> =
            vec_execute_result.into_iter().map(Into::into).collect();
        proto_execute_response.set_execute_results(vec_proto_execute_result.into());
        proto_execute_response
    }
}

impl From<ProtoExecuteResponse> for Vec<ExecuteResult> {
    fn from(mut proto_execute_response: ProtoExecuteResponse) -> Self {
        proto_execute_response
            .take_execute_results()
            .into_vec()
            .into_iter()
            .map(Into::into)
            .collect()
    }
}

impl From<ExecuteResult> for ProtoExecuteResult {
    fn from(execute_result: ExecuteResult) -> Self {
        let mut proto_execute_result = ProtoExecuteResult::new();
        proto_execute_result.set_changes(execute_result.changes as u64);
        proto_execute_result
    }
}

impl From<ProtoExecuteResult> for ExecuteResult {
    fn from(proto_execute_result: ProtoExecuteResult) -> Self {
        ExecuteResult {
            changes: proto_execute_result.get_changes() as usize,
        }
    }
}


impl From<BulkExecute> for ProtoBulkExecuteRequest {
    fn from(bulk_execute: BulkExecute) -> Self {
        let mut proto_bulk_execute_request = ProtoBulkExecuteRequest::new();
        let vec_proto_execute_request: Vec<ProtoExecuteRequest> =
            bulk_execute.executes.into_iter().map(Into::into).collect();
        proto_bulk_execute_request.set_executes(vec_proto_execute_request.into());
        proto_bulk_execute_request
    }
}

impl From<ProtoBulkExecuteRequest> for BulkExecute {
    fn from(mut proto_bulk_execute_request: ProtoBulkExecuteRequest) -> Self {
        BulkExecute {
            executes: proto_bulk_execute_request
                .take_executes()
                .into_vec()
                .into_iter()
                .map(Into::into)
                .collect(),
        }
    }
}

impl From<Vec<Vec<ExecuteResult>>> for ProtoBulkExecuteResponse {
    fn from(vec_vec_execute_response: Vec<Vec<ExecuteResult>>) -> Self {
        let mut proto_bulk_execute_response = ProtoBulkExecuteResponse::new();
        let vec_proto_execute_response: Vec<ProtoExecuteResponse> =
            vec_vec_execute_response.into_iter().map(Into::into).collect();
        proto_bulk_execute_response.set_execute_responses(vec_proto_execute_response.into());
        proto_bulk_execute_response
    }
}

impl From<ProtoBulkExecuteResponse> for Vec<Vec<ExecuteResult>> {
    fn from(mut proto_bulk_execute_response: ProtoBulkExecuteResponse) -> Self {
        proto_bulk_execute_response
            .take_execute_responses()
            .into_vec()
            .into_iter()
            .map(Into::into)
            .collect()
    }
}