Data
La estructura Data contiene toda la información que podría generar un sensor base.
Se necesita construir lo siguiente.
* DONE ValuePair * DONE Point * DONE Equipment * DONE DT_GEN Format ** DONE Data
Todo está definido bajo una estrucura de directorios.
tree src
src ├── elements │ ├── data.rs │ ├── dtgenformat.rs │ ├── equipment.rs │ ├── mod.rs │ ├── point.rs │ └── valuepair.rs ├── generators.rs ├── lib.rs ├── main.rs └── stream ├── asyncread.rs ├── asyncread.rs~ ├── asyncwrite.rs ├── asyncwrite.rs~ ├── mod.rs ├── read.rs ├── write.rs ├── write.rs~ └── writeto_stream.rs
2 directories, 18 files
Es la serie de funciones que construyen aleatoriamente datos a solicitud.
En generators.rs tenemos la función create_data que genera una instancia de Data aleatoria.
Creación de comando que permite una entrada y deserializarla. Sea un stream o de un archivo.
Hay dos funciones síncronas que permite leer o escribir desde un stream.
De estas dos derivan las asociadas a archivos, para leer o escribir a archivos.
Asímismo, de manera asíncrona se usa tokio para crear las funciones que toman leen desde un buffer y lo envían por un canal y viceversa.
Estas funcionalidades son claves para que este módulo se pueda utilizar, por ejemplo, en servidores tcp o servicios generadores de datos para simular sensores.
** Lectura de archivos
En stream.rs -> read_file se implementa una función sencilla que toma un archivo completo y lo deserializa directamente para convertirlo en un array de Data.
Esto es solo para un archivo de tipo json.
pub fn readfile
** Lectura de stream y entrega de vector
Si el origen del dato viene de un stream, entonces se usa read_io que toma la serie de valores (o de un archivo no json)
pub fn readio
** Lectura de stream y entrega a stream
En este caso, en vez de lograr un acumulador, tomar el Data convertido enviarlo mediante un stream con rasgo Write.
Por ejemplo, podría necesitar enviarlo por una cola a un stream de socket, entonces crear un módulo que tome el dato, lo procese y envíe a otra parte, si es que lo necesita. También podría utilizarse para enviar a un proceso concurrente o funcionalidad atómica separada.
Todas las operaciones disponibles para crear datos y enviarlos o recibirlos por stream están testeadas.
Revisar los tests pueden servir para aprender a usar las funciones.