First try to configure CI (#16)

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
This commit is contained in:
Francesco Guardiani 2020-03-13 15:29:02 +01:00 committed by GitHub
parent 15c4a315c6
commit 1c77ea94ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 138 additions and 62 deletions

54
.github/workflows/master.yml vendored Normal file
View File

@ -0,0 +1,54 @@
name: Master
on:
push:
branches:
- master
jobs:
build:
name: Run tests on ${{ matrix.target }} ${{ matrix.toolchain }}
runs-on: ubuntu-latest
strategy:
matrix:
toolchain:
- stable
- nightly
target:
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
steps:
- uses: actions/checkout@v2
- run: apt-get update
if: ${{ matrix.toolchain == "x86_64-unknown-linux-musl" }}
- run: apt-get install -y musl
if: ${{ matrix.toolchain == "x86_64-unknown-linux-musl" }}
- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v1
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
target: ${{ matrix.target }}
- uses: actions-rs/cargo@v1
with:
command: build
toolchain: ${{ matrix.toolchain }}
target: ${{ matrix.target }}
- uses: actions-rs/cargo@v1
with:
command: test
toolchain: ${{ matrix.toolchain }}
target: ${{ matrix.target }}

58
.github/workflows/pr.yml vendored Normal file
View File

@ -0,0 +1,58 @@
name: Pull Request
on:
pull_request:
branches:
- master
jobs:
build:
name: Run tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v1
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
- uses: actions-rs/cargo@v1
with:
command: build
toolchain: stable
target: x86_64-unknown-linux-gnu
- uses: actions-rs/cargo@v1
with:
command: test
toolchain: stable
target: x86_64-unknown-linux-gnu
fmt:
name: Format check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
components: rustfmt
- uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check

View File

@ -1,25 +0,0 @@
name: Rust
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/cargo@v1
with:
command: build
toolchain: stable
target: x86_64-unknown-linux-gnu
- uses: actions-rs/cargo@v1
with:
command: test
toolchain: stable
target: x86_64-unknown-linux-gnu

View File

@ -44,10 +44,7 @@ pub trait AttributesWriter {
} }
pub(crate) trait DataAttributesWriter { pub(crate) trait DataAttributesWriter {
fn set_datacontenttype( fn set_datacontenttype(&mut self, datacontenttype: Option<impl Into<String>>);
&mut self,
datacontenttype: Option<impl Into<String>>,
);
fn set_dataschema(&mut self, dataschema: Option<impl Into<String>>); fn set_dataschema(&mut self, dataschema: Option<impl Into<String>>);
} }
@ -169,10 +166,7 @@ impl AttributesWriter for Attributes {
} }
impl DataAttributesWriter for Attributes { impl DataAttributesWriter for Attributes {
fn set_datacontenttype( fn set_datacontenttype(&mut self, datacontenttype: Option<impl Into<String>>) {
&mut self,
datacontenttype: Option<impl Into<String>>,
) {
match self { match self {
Attributes::V10(a) => a.set_datacontenttype(datacontenttype), Attributes::V10(a) => a.set_datacontenttype(datacontenttype),
} }

View File

@ -24,8 +24,8 @@ impl Data {
/// [`AsRef<[u8]>`]: https://doc.rust-lang.org/std/convert/trait.AsRef.html /// [`AsRef<[u8]>`]: https://doc.rust-lang.org/std/convert/trait.AsRef.html
/// [`Data`]: enum.Data.html /// [`Data`]: enum.Data.html
pub fn from_base64<I>(i: I) -> Result<Self, base64::DecodeError> pub fn from_base64<I>(i: I) -> Result<Self, base64::DecodeError>
where where
I: AsRef<[u8]>, I: AsRef<[u8]>,
{ {
Ok(base64::decode(&i)?.into()) Ok(base64::decode(&i)?.into())
} }
@ -68,7 +68,7 @@ impl TryFrom<Data> for String {
match value { match value {
Data::String(s) => Ok(s), Data::String(s) => Ok(s),
Data::Binary(v) => Ok(String::from_utf8(v)?), Data::Binary(v) => Ok(String::from_utf8(v)?),
Data::Json(s) => Ok(s.to_string()) Data::Json(s) => Ok(s.to_string()),
} }
} }
} }

View File

@ -1,8 +1,11 @@
use super::{Attributes, AttributesReader, AttributesWriter, Data, ExtensionValue, SpecVersion, AttributesV10}; use super::{
Attributes, AttributesReader, AttributesV10, AttributesWriter, Data, ExtensionValue,
SpecVersion,
};
use crate::event::attributes::DataAttributesWriter;
use chrono::{DateTime, FixedOffset}; use chrono::{DateTime, FixedOffset};
use delegate::delegate; use delegate::delegate;
use std::convert::{TryFrom}; use std::convert::TryFrom;
use crate::event::attributes::DataAttributesWriter;
/// Data structure that represents a [CloudEvent](https://github.com/cloudevents/spec/blob/master/spec.md). /// Data structure that represents a [CloudEvent](https://github.com/cloudevents/spec/blob/master/spec.md).
/// It provides methods to get the attributes through [`AttributesReader`] /// It provides methods to get the attributes through [`AttributesReader`]
@ -74,7 +77,7 @@ impl Default for Event {
fn default() -> Self { fn default() -> Self {
Event { Event {
attributes: Attributes::V10(AttributesV10::default()), attributes: Attributes::V10(AttributesV10::default()),
data: None data: None,
} }
} }
} }
@ -94,15 +97,18 @@ impl Event {
/// let mut e = Event::default(); /// let mut e = Event::default();
/// e.write_data("application/json", None, json!({})) /// e.write_data("application/json", None, json!({}))
/// ``` /// ```
pub fn write_data<S: Into<String>, D: Into<Data>>(&mut self, content_type: S, schema: Option<S>, value: D) { pub fn write_data<S: Into<String>, D: Into<Data>>(
&mut self,
content_type: S,
schema: Option<S>,
value: D,
) {
self.attributes.set_datacontenttype(Some(content_type)); self.attributes.set_datacontenttype(Some(content_type));
self.attributes.set_dataschema(schema); self.attributes.set_dataschema(schema);
self.data = Some(value.into()); self.data = Some(value.into());
} }
pub fn get_data<T: Sized + From<Data>>( pub fn get_data<T: Sized + From<Data>>(&self) -> Option<T> {
&self,
) -> Option<T> {
match self.data.as_ref() { match self.data.as_ref() {
Some(d) => Some(T::from(d.clone())), Some(d) => Some(T::from(d.clone())),
None => None, None => None,
@ -128,8 +134,6 @@ impl Event {
} }
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
@ -140,17 +144,11 @@ mod tests {
"hello": "world" "hello": "world"
}); });
let mut e = Event::default(); let mut e = Event::default();
e.write_data( e.write_data("application/json", None, expected_data.clone());
"application/json",
None,
expected_data.clone()
);
let data: serde_json::Value = e.try_get_data().unwrap().unwrap(); let data: serde_json::Value = e.try_get_data().unwrap().unwrap();
assert_eq!(expected_data, data); assert_eq!(expected_data, data);
assert_eq!("application/json", e.get_datacontenttype().unwrap()) assert_eq!("application/json", e.get_datacontenttype().unwrap())
} }
} }

View File

@ -1,9 +1,9 @@
use crate::event::attributes::DataAttributesWriter;
use crate::event::{AttributesReader, AttributesWriter, ExtensionValue, SpecVersion}; use crate::event::{AttributesReader, AttributesWriter, ExtensionValue, SpecVersion};
use chrono::{DateTime, FixedOffset}; use chrono::{DateTime, FixedOffset};
use std::collections::HashMap;
use crate::event::attributes::DataAttributesWriter;
use uuid::Uuid;
use hostname::get_hostname; use hostname::get_hostname;
use std::collections::HashMap;
use uuid::Uuid;
pub struct Attributes { pub struct Attributes {
id: String, id: String,
@ -109,10 +109,7 @@ impl AttributesWriter for Attributes {
} }
impl DataAttributesWriter for Attributes { impl DataAttributesWriter for Attributes {
fn set_datacontenttype( fn set_datacontenttype(&mut self, datacontenttype: Option<impl Into<String>>) {
&mut self,
datacontenttype: Option<impl Into<String>>,
) {
self.datacontenttype = datacontenttype.map(Into::into) self.datacontenttype = datacontenttype.map(Into::into)
} }
@ -131,7 +128,7 @@ impl Default for Attributes {
dataschema: None, dataschema: None,
subject: None, subject: None,
time: None, time: None,
extensions: HashMap::new() extensions: HashMap::new(),
} }
} }
} }