Unverified Commit b23ccb7b authored by Russell Cohen's avatar Russell Cohen Committed by GitHub
Browse files

Fix toolchain setting in CI (#532)

* Fix toolchain setting in CI

Due to a misunderstanding of the actions-rs toolchain action, we were installing a toolchain but _not actually using it_!

* Update ci.yaml

set toolchain components explicitly

* Fixes to get code compiling on 1.51 again

* Update ci.yaml

Add rustdoc

* Update ci.yaml

switch to 1.52.1 for rustdoc links

* Update JSON fuzz target

* Fix missed refactoring in ci.yaml
parent 72d680db
Loading
Loading
Loading
Loading
+18 −13
Original line number Diff line number Diff line
@@ -7,7 +7,8 @@ on:
name: CI

env:
  rust_version: 1.51.0
  rust_version: 1.52.1
  rust_toolchain_components: clippy,rustfmt
  java_version: 11

jobs:
@@ -53,6 +54,8 @@ jobs:
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
        components: ${{ env.rust_toolchain_components }}
        default: true
    - name: Set up JDK
      uses: actions/setup-java@v1
      with:
@@ -86,6 +89,8 @@ jobs:
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
        components: ${{ env.rust_toolchain_components }}
        default: true
    - name: Set up JDK
      uses: actions/setup-java@v1
      with:
@@ -116,6 +121,8 @@ jobs:
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
        components: ${{ env.rust_toolchain_components }}
        default: true
    - name: Format Check
      run: rustfmt --check --edition 2018 $(find -name '*.rs' -print)
    - name: execute runtime tests
@@ -138,6 +145,8 @@ jobs:
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
        components: ${{ env.rust_toolchain_components }}
        default: true
    - name: Set up JDK
      uses: actions/setup-java@v1
      with:
@@ -172,9 +181,8 @@ jobs:
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
        components: ${{ env.rust_toolchain_components }}
        default: true
    - name: Generate a name for the SDK
      id: gen-name
      run: echo "name=${GITHUB_REF##*/}" >> $GITHUB_ENV
@@ -203,9 +211,8 @@ jobs:
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
        components: ${{ env.rust_toolchain_components }}
        default: true
    - name: Generate a name for the SDK
      id: gen-name
      run: echo "name=${GITHUB_REF##*/}" >> $GITHUB_ENV
@@ -234,9 +241,8 @@ jobs:
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
        components: ${{ env.rust_toolchain_components }}
        default: true
    - name: Generate a name for the SDK
      id: gen-name
      run: echo "name=${GITHUB_REF##*/}" >> $GITHUB_ENV
@@ -265,9 +271,8 @@ jobs:
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ env.rust_version }}
        components: ${{ env.rust_toolchain_components }}
        default: true
    - name: Generate a name for the SDK
      id: gen-name
      run: echo "name=${GITHUB_REF##*/}" >> $GITHUB_ENV
+14 −16
Original line number Diff line number Diff line
@@ -16,12 +16,10 @@ pub fn run_data(data: &[u8]) {
        // Exercise string unescaping since the later comparison against Serde
        // reserializes, and thus, loses UTF-16 surrogate pairs.
        for token in tokens {
            if let Token::ValueString(escaped) = token {
                if let Ok(unescaped) = escaped.to_unescaped() {
                    let serde_equiv = serde_json::from_str::<String>(&format!(
                        "\"{}\"",
                        escaped.as_escaped_str()
                    ))
            if let Token::ValueString { value, .. } = token {
                if let Ok(unescaped) = value.to_unescaped() {
                    let serde_equiv =
                        serde_json::from_str::<String>(&format!("\"{}\"", value.as_escaped_str()))
                            .unwrap();
                    assert_eq!(serde_equiv, unescaped);
                }
@@ -48,12 +46,12 @@ pub fn run_data(data: &[u8]) {
/// Converts a token stream into a Serde [Value]
fn convert_tokens<'a, I: Iterator<Item = Token<'a>>>(tokens: &mut Peekable<I>) -> Value {
    match tokens.next().unwrap() {
        Token::StartObject => {
        Token::StartObject { .. } => {
            let mut map = Map::new();
            loop {
                match tokens.next() {
                    Some(Token::EndObject) => break,
                    Some(Token::ObjectKey(key)) => {
                    Some(Token::EndObject { .. }) => break,
                    Some(Token::ObjectKey { key, .. }) => {
                        let key = key.to_unescaped().unwrap().to_string();
                        let value = convert_tokens(tokens);
                        map.insert(key, value);
@@ -64,11 +62,11 @@ fn convert_tokens<'a, I: Iterator<Item = Token<'a>>>(tokens: &mut Peekable<I>) -
            }
            Value::Object(map)
        }
        Token::StartArray => {
        Token::StartArray { .. } => {
            let mut list = Vec::new();
            loop {
                match tokens.peek() {
                    Some(Token::EndArray) => {
                    Some(Token::EndArray { .. }) => {
                        tokens.next();
                        break;
                    }
@@ -80,14 +78,14 @@ fn convert_tokens<'a, I: Iterator<Item = Token<'a>>>(tokens: &mut Peekable<I>) -
            }
            Value::Array(list)
        }
        Token::ValueNull => Value::Null,
        Token::ValueNumber(num) => Value::Number(match num {
        Token::ValueNull { .. } => Value::Null,
        Token::ValueNumber { value, .. } => Value::Number(match value {
            Number::NegInt(value) => serde_json::Number::from(value),
            Number::PosInt(value) => serde_json::Number::from(value),
            Number::Float(value) => serde_json::Number::from_f64(value).unwrap(),
        }),
        Token::ValueString(string) => Value::String(string.to_unescaped().unwrap().into()),
        Token::ValueBool(bool) => Value::Bool(bool),
        Token::ValueString { value, .. } => Value::String(value.to_unescaped().unwrap().into()),
        Token::ValueBool { value, .. } => Value::Bool(value),
        _ => unreachable!(),
    }
}
+6 −6
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ impl<'a> JsonTokenIterator<'a> {
    /// Expects there to be another byte coming up, and previews it.
    /// If there isn't, an `UnexpectedEOS` error is returned.
    fn peek_expect(&self) -> Result<u8, Error> {
        self.peek_byte().ok_or_else(|| self.error(UnexpectedEOS))
        self.peek_byte().ok_or_else(|| self.error(UnexpectedEos))
    }

    /// Advances to the next byte in the stream.
@@ -94,7 +94,7 @@ impl<'a> JsonTokenIterator<'a> {
    /// Expects there to be another byte coming up, and returns it while advancing.
    /// If there isn't, an `UnexpectedEOS` error is returned.
    fn next_expect(&mut self) -> Result<u8, Error> {
        self.next_byte().ok_or_else(|| self.error(UnexpectedEOS))
        self.next_byte().ok_or_else(|| self.error(UnexpectedEos))
    }

    /// Creates an error at the given `offset` in the stream.
@@ -195,7 +195,7 @@ impl<'a> JsonTokenIterator<'a> {
                    b'\\' | b'/' | b'"' | b'b' | b'f' | b'n' | b'r' | b't' => self.advance(),
                    b'u' => {
                        if self.index + 4 > self.input.len() {
                            return Err(self.error_at(self.input.len(), UnexpectedEOS));
                            return Err(self.error_at(self.input.len(), UnexpectedEos));
                        }
                        self.index += 4;
                    }
@@ -211,7 +211,7 @@ impl<'a> JsonTokenIterator<'a> {
    fn expect_literal(&mut self, expected: &[u8]) -> Result<(), Error> {
        let (start, end) = (self.index, self.index + expected.len());
        if end > self.input.len() {
            return Err(self.error_at(self.input.len(), UnexpectedEOS));
            return Err(self.error_at(self.input.len(), UnexpectedEos));
        }
        if expected != &self.input[start..end] {
            return Err(self.error_at(
@@ -681,7 +681,7 @@ mod tests {
        assert_eq!(start_array(1), iter.next());
        assert_eq!(value_null(2), iter.next());
        assert_eq!(
            Some(Err(Error::new(ErrorReason::UnexpectedEOS, Some(7)))),
            Some(Err(Error::new(ErrorReason::UnexpectedEos, Some(7)))),
            iter.next()
        );
    }
@@ -757,7 +757,7 @@ mod tests {
        assert_eq!(start_object(1), iter.next());
        assert_eq!(object_key(2, "test"), iter.next());
        assert_eq!(
            Some(Err(Error::new(ErrorReason::UnexpectedEOS, Some(9),))),
            Some(Err(Error::new(ErrorReason::UnexpectedEos, Some(9),))),
            iter.next()
        );
        assert_eq!(None, iter.next());
+2 −2
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ pub enum ErrorReason {
    InvalidUtf8,
    UnescapeFailed(EscapeError),
    UnexpectedControlCharacter(u8),
    UnexpectedEOS,
    UnexpectedEos,
    UnexpectedToken(char, &'static str),
}
use ErrorReason::*;
@@ -63,7 +63,7 @@ impl fmt::Display for Error {
                "unexpected token '{}'. Expected one of {}",
                token, expected
            ),
            UnexpectedEOS => write!(f, "unexpected end of stream"),
            UnexpectedEos => write!(f, "unexpected end of stream"),
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ impl<'a> EscapedStr<'a> {

    /// Unescapes the string and returns it.
    /// If the string doesn't need unescaping, it will be returned directly.
    pub fn to_unescaped(&self) -> Result<Cow<'a, str>, EscapeError> {
    pub fn to_unescaped(self) -> Result<Cow<'a, str>, EscapeError> {
        unescape_string(self.0)
    }
}
Loading