warning: profiles for the non root package will be ignored, specify profiles at the workspace root:
package:   /Users/kevinmoo/Desktop/localrepo/ddex-suite/packages/ddex-builder/bindings/node/Cargo.toml
workspace: /Users/kevinmoo/Desktop/localrepo/ddex-suite/Cargo.toml
warning: profiles for the non root package will be ignored, specify profiles at the workspace root:
package:   /Users/kevinmoo/Desktop/localrepo/ddex-suite/packages/ddex-builder/bindings/wasm/Cargo.toml
workspace: /Users/kevinmoo/Desktop/localrepo/ddex-suite/Cargo.toml
   Compiling ddex-parser v0.4.0 (/Users/kevinmoo/Desktop/localrepo/ddex-suite/packages/ddex-parser)
    Checking ddex-core v0.4.0 (/Users/kevinmoo/Desktop/localrepo/ddex-suite/packages/core)
warning: ddex-parser@0.4.0: Generating TypeScript definitions...
warning: unused import: `WorkingStreamingElement`
 --> packages/ddex-parser/src/streaming/perf_analysis.rs:4:61
  |
4 | use crate::streaming::working_impl::{WorkingStreamIterator, WorkingStreamingElement};
  |                                                             ^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

warning: unused import: `WorkingStreamingStats`
 --> packages/ddex-parser/src/streaming/zero_copy_benchmark.rs:9:47
  |
9 | use crate::streaming::{WorkingStreamIterator, WorkingStreamingStats};
  |                                               ^^^^^^^^^^^^^^^^^^^^^

warning: redundant field names in struct initialization
   --> packages/ddex-parser/src/streaming/zero_copy_benchmark.rs:199:13
    |
199 |             current_elements: current_elements,
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `current_elements`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names
    = note: `#[warn(clippy::redundant_field_names)]` on by default

warning: redundant field names in struct initialization
   --> packages/ddex-parser/src/streaming/zero_copy_benchmark.rs:200:13
    |
200 |             zero_copy_elements: zero_copy_elements,
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `zero_copy_elements`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names

warning: unused import: `ERNVersion`
 --> packages/ddex-parser/src/api_integration_test.rs:6:29
  |
6 |     use crate::{DDEXParser, ERNVersion};
  |                             ^^^^^^^^^^

warning: variant `Complete` is never constructed
  --> packages/ddex-parser/src/streaming/aligned_comprehensive.rs:33:5
   |
27 | enum AlignedParserState {
   |      ------------------ variant in this enum
...
33 |     Complete,
   |     ^^^^^^^^
   |
   = note: `AlignedParserState` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
   = note: `#[warn(dead_code)]` on by default

warning: method `get_current_location` is never used
   --> packages/ddex-parser/src/streaming/aligned_comprehensive.rs:388:8
    |
50  | impl<R: BufRead> AlignedStreamingParser<R> {
    | ------------------------------------------ method in this implementation
...
388 |     fn get_current_location(&self) -> ErrorLocation {
    |        ^^^^^^^^^^^^^^^^^^^^

warning: variant `Complete` is never constructed
  --> packages/ddex-parser/src/streaming/comprehensive.rs:32:5
   |
26 | enum ParserState {
   |      ----------- variant in this enum
...
32 |     Complete,
   |     ^^^^^^^^
   |
   = note: `ParserState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: field `config` is never read
  --> packages/ddex-parser/src/streaming/fast_streaming_parser.rs:14:5
   |
13 | pub struct FastStreamingParser {
   |            ------------------- field in this struct
14 |     config: StreamingConfig,
   |     ^^^^^^

warning: fields `reader` and `buffer` are never read
  --> packages/ddex-parser/src/streaming/fixed_comprehensive.rs:27:5
   |
26 | pub struct FixedStreamingParser<R: BufRead> {
   |            -------------------- fields in this struct
27 |     reader: Reader<R>,
   |     ^^^^^^
28 |     buffer: Vec<u8>,
   |     ^^^^^^

warning: method `get_location` is never used
   --> packages/ddex-parser/src/streaming/minimal.rs:129:8
    |
40  | impl<R: BufRead> MinimalStreamingParser<R> {
    | ------------------------------------------ method in this implementation
...
129 |     fn get_location(&self) -> ErrorLocation {
    |        ^^^^^^^^^^^^

warning: methods `find_element_boundaries` and `find_pattern` are never used
   --> packages/ddex-parser/src/streaming/parallel_parser.rs:84:8
    |
25  | impl ParallelStreamingParser {
    | ---------------------------- methods in this implementation
...
84  |     fn find_element_boundaries(&self, data: &[u8]) -> Vec<usize> {
    |        ^^^^^^^^^^^^^^^^^^^^^^^
...
131 |     fn find_pattern(&self, data: &[u8], pattern: &[u8]) -> Option<usize> {
    |        ^^^^^^^^^^^^

warning: field `reader` is never read
   --> packages/ddex-parser/src/streaming/parallel_parser.rs:185:5
    |
184 | pub struct ParallelStreamingIterator<R: BufRead> {
    |            ------------------------- field in this struct
185 |     reader: R,
    |     ^^^^^^

warning: multiple methods are never used
   --> packages/ddex-parser/src/streaming/parser.rs:136:8
    |
30  | impl<R: BufRead> StreamingDDEXParser<R> {
    | --------------------------------------- methods in this implementation
...
136 |     fn handle_start_element(
    |        ^^^^^^^^^^^^^^^^^^^^
...
218 |     fn handle_nested_start_element(&mut self, name: &str) -> Result<(), ParseError> {
    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
273 |     fn handle_end_element(
    |        ^^^^^^^^^^^^^^^^^^
...
331 |     fn handle_header_end_element(
    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
...
385 |     fn handle_release_end_element(
    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
...
427 |     fn handle_resource_end_element(
    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
465 |     fn handle_party_end_element(
    |        ^^^^^^^^^^^^^^^^^^^^^^^^
...
477 |     fn handle_deal_end_element(
    |        ^^^^^^^^^^^^^^^^^^^^^^^
...
542 |     fn get_current_location(&self) -> ErrorLocation {
    |        ^^^^^^^^^^^^^^^^^^^^

warning: field `state` is never read
  --> packages/ddex-parser/src/streaming/zero_copy_parser.rs:25:5
   |
19 | pub struct ZeroCopyParser {
   |            -------------- field in this struct
...
25 |     state: ParserState,
   |     ^^^^^

warning: variants `InMessageHeader`, `InRelease`, `InResource`, and `Done` are never constructed
  --> packages/ddex-parser/src/streaming/zero_copy_parser.rs:72:5
   |
70 | enum ParserState {
   |      ----------- variants in this enum
71 |     Initial,
72 |     InMessageHeader,
   |     ^^^^^^^^^^^^^^^
73 |     InRelease {
   |     ^^^^^^^^^
...
76 |     InResource {
   |     ^^^^^^^^^^
...
80 |     Done,
   |     ^^^^
   |
   = note: `ParserState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: method `find_closing_tag_simple` is never used
   --> packages/ddex-parser/src/streaming/zero_copy_parser.rs:699:8
    |
137 | impl ZeroCopyParser {
    | ------------------- method in this implementation
...
699 |     fn find_closing_tag_simple(&self, data: &[u8], start: usize, tag_name: &str) -> Option<usize> {
    |        ^^^^^^^^^^^^^^^^^^^^^^^

warning: field `reader` is never read
   --> packages/ddex-parser/src/streaming/zero_copy_parser.rs:725:5
    |
724 | pub struct ZeroCopyStreamIterator<R: BufRead> {
    |            ---------------------- field in this struct
725 |     reader: R,
    |     ^^^^^^

warning: fields `position` and `chunk_size` are never read
   --> packages/ddex-parser/src/streaming/zero_copy_parser.rs:893:5
    |
890 | pub struct ZeroCopyIterator {
    |            ---------------- fields in this struct
...
893 |     position: usize,
    |     ^^^^^^^^
894 |     chunk_size: usize,
    |     ^^^^^^^^^^

warning: variable does not need to be mutable
   --> packages/ddex-parser/src/streaming/aligned_comprehensive.rs:575:13
    |
575 |         let mut iterator = AlignedStreamIterator::new(cursor, ERNVersion::V4_3);
    |             ----^^^^^^^^
    |             |
    |             help: remove this `mut`
    |
    = note: `#[warn(unused_mut)]` on by default

warning: variable does not need to be mutable
   --> packages/ddex-parser/src/streaming/fast_zero_copy.rs:430:13
    |
430 |         let mut iterator = FastZeroCopyIterator::new(cursor, ERNVersion::V4_3);
    |             ----^^^^^^^^
    |             |
    |             help: remove this `mut`

warning: stripping a prefix manually
   --> packages/ddex-parser/src/parser/xpath_selector.rs:313:37
    |
313 |                     let attr_expr = &filter[1..]; // Remove @
    |                                     ^^^^^^^^^^^^
    |
note: the prefix was tested here
   --> packages/ddex-parser/src/parser/xpath_selector.rs:311:17
    |
311 |                 if filter.starts_with('@') {
    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip
    = note: `#[warn(clippy::manual_strip)]` on by default
help: try using the `strip_prefix` method
    |
311 ~                 if let Some(attr_expr) = filter.strip_prefix('@') {
312 |                     // Attribute filter [@attr] or [@attr="value"]
313 ~                     // Remove @
    |

warning: variable does not need to be mutable
   --> packages/ddex-parser/src/streaming/parallel_parser.rs:504:13
    |
504 |         let mut iterator = ParallelStreamingIterator::new(cursor, ERNVersion::V4_3);
    |             ----^^^^^^^^
    |             |
    |             help: remove this `mut`

warning: variable does not need to be mutable
   --> packages/ddex-parser/src/streaming/perf_analysis.rs:126:13
    |
126 |         let mut iterator = WorkingStreamIterator::new(cursor, ERNVersion::V4_3);
    |             ----^^^^^^^^
    |             |
    |             help: remove this `mut`

warning: unused variable: `initial_stats`
   --> packages/ddex-parser/src/streaming/perf_analysis.rs:267:13
    |
267 |         let initial_stats = iterator.stats();
    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_initial_stats`
    |
    = note: `#[warn(unused_variables)]` on by default

warning: unused variable: `final_stats`
   --> packages/ddex-parser/src/streaming/perf_analysis.rs:286:13
    |
286 |         let final_stats = iterator.stats();
    |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_final_stats`

warning: variable does not need to be mutable
   --> packages/ddex-parser/src/streaming/parallel_benchmark.rs:206:13
    |
206 |         let mut working_iterator = WorkingStreamIterator::new(cursor, ERNVersion::V4_3);
    |             ----^^^^^^^^^^^^^^^^
    |             |
    |             help: remove this `mut`

warning: variable does not need to be mutable
   --> packages/ddex-parser/src/streaming/parallel_benchmark.rs:235:13
    |
235 |         let mut parallel_iterator = ParallelStreamingIterator::new(cursor, ERNVersion::V4_3);
    |             ----^^^^^^^^^^^^^^^^^
    |             |
    |             help: remove this `mut`

warning: you seem to use `.enumerate()` and immediately discard the index
   --> packages/ddex-parser/src/lib.rs:171:43
    |
171 |         for (_total_elements, element) in iterator.enumerate() {
    |                                           ^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index
    = note: `#[warn(clippy::unused_enumerate_index)]` on by default
help: remove the `.enumerate()` call
    |
171 -         for (_total_elements, element) in iterator.enumerate() {
171 +         for element in iterator {
    |

warning: variable does not need to be mutable
   --> packages/ddex-parser/src/streaming/parallel_benchmark.rs:419:21
    |
419 |                 let mut iterator =
    |                     ----^^^^^^^^
    |                     |
    |                     help: remove this `mut`

warning: `ddex-parser` (lib) generated 16 warnings (run `cargo clippy --fix --lib -p ddex-parser` to apply 2 suggestions)
warning: used `assert_eq!` with a literal bool
   --> packages/ddex-parser/src/parser/attribute_extractor.rs:581:17
    |
581 |                 assert_eq!(*is_default, true);
    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison
    = note: `#[warn(clippy::bool_assert_comparison)]` on by default
help: replace it with `assert!(..)`
    |
581 -                 assert_eq!(*is_default, true);
581 +                 assert!(*is_default);
    |

warning: used `assert_eq!` with a literal bool
   --> packages/ddex-parser/src/parser/attribute_extractor.rs:648:17
    |
648 |                 assert_eq!(*nil_value, true);
    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison
help: replace it with `assert!(..)`
    |
648 -                 assert_eq!(*nil_value, true);
648 +                 assert!(*nil_value);
    |

warning: length comparison to one
   --> packages/ddex-parser/src/parser/attribute_extractor.rs:681:17
    |
681 |         assert!(standard.len() >= 1); // Should contain LanguageAndScriptCode
    |                 ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!standard.is_empty()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero
    = note: `#[warn(clippy::len_zero)]` on by default

warning: length comparison to one
   --> packages/ddex-parser/src/parser/attribute_extractor.rs:682:17
    |
682 |         assert!(extensions.len() >= 1); // Should contain custom:proprietary
    |                 ^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!extensions.is_empty()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero

warning: module has the same name as its containing module
  --> packages/ddex-parser/src/parser/tests.rs:2:1
   |
2  | / mod tests {
3  | |     use crate::parser::detector::VersionDetector;
4  | |     use crate::parser::security::SecurityConfig;
5  | |     use ddex_core::models::versions::ERNVersion;
...  |
52 | | }
   | |_^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception
   = note: `#[warn(clippy::module_inception)]` on by default

warning: length comparison to one
   --> packages/ddex-parser/src/streaming/minimal.rs:234:17
    |
234 |         assert!(elements.len() >= 1);
    |                 ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!elements.is_empty()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero

warning: using `clone` on type `Option<u32>` which implements the `Copy` trait
   --> packages/ddex-parser/src/streaming/comprehensive_tests.rs:382:47
    |
382 |                 } => Some((reference.clone(), width.clone(), height.clone())),
    |                                               ^^^^^^^^^^^^^ help: try dereferencing it: `*width`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
    = note: `#[warn(clippy::clone_on_copy)]` on by default

warning: using `clone` on type `Option<u32>` which implements the `Copy` trait
   --> packages/ddex-parser/src/streaming/comprehensive_tests.rs:382:62
    |
382 |                 } => Some((reference.clone(), width.clone(), height.clone())),
    |                                                              ^^^^^^^^^^^^^^ help: try dereferencing it: `*height`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy

warning: this loop could be written as a `for` loop
   --> packages/ddex-parser/src/streaming/comprehensive_tests.rs:447:9
    |
447 |         while let Some(result) = iterator.next() {
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for result in iterator.by_ref()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator
    = note: `#[warn(clippy::while_let_on_iterator)]` on by default

warning: this loop could be written as a `for` loop
   --> packages/ddex-parser/src/streaming/comprehensive_tests.rs:522:9
    |
522 |         while let Some(result) = iterator.next() {
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for result in iterator`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator

warning: this loop could be written as a `for` loop
   --> packages/ddex-parser/src/streaming/perf_analysis.rs:155:5
    |
155 |     while let Some(result) = iterator.next() {
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for result in iterator`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator

warning: you should consider adding a `Default` implementation for `PerformanceAnalyzer`
   --> packages/ddex-parser/src/streaming/perf_analysis.rs:232:5
    |
232 | /     pub fn new() -> Self {
233 | |         Self {
234 | |             results: Vec::new(),
235 | |         }
236 | |     }
    | |_____^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default
    = note: `#[warn(clippy::new_without_default)]` on by default
help: try adding this
    |
231 + impl Default for PerformanceAnalyzer {
232 +     fn default() -> Self {
233 +         Self::new()
234 +     }
235 + }
    |

warning: this loop could be written as a `for` loop
   --> packages/ddex-parser/src/streaming/zero_copy_benchmark.rs:111:5
    |
111 |     while let Some(result) = iterator.next() {
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for result in iterator`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator

warning: this loop could be written as a `for` loop
   --> packages/ddex-parser/src/streaming/zero_copy_benchmark.rs:131:5
    |
131 |     while let Some(result) = iterator.next() {
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for result in iterator`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator

warning: length comparison to one
   --> packages/ddex-parser/src/api_integration_test.rs:135:17
    |
135 |                 elements.len() >= 1,
    |                 ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!elements.is_empty()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero

warning: `ddex-parser` (lib test) generated 43 warnings (14 duplicates) (run `cargo clippy --fix --lib -p ddex-parser --tests` to apply 26 suggestions)
warning: `crate` references the macro call's crate
  --> packages/ddex-parser/tests/test_categories.rs:54:17
   |
54 |             use crate::test_categories::TestCategory;
   |                 ^^^^^ help: to reference the macro definition's crate, use: `$crate`
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#crate_in_macro_def
   = note: `#[warn(clippy::crate_in_macro_def)]` on by default

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
 --> packages/ddex-parser/tests/error_contract_test.rs:8:18
  |
8 |     let result = parser.parse(std::io::Cursor::new(invalid_xml.as_bytes()));
  |                  ^^^^^^ cannot borrow as mutable
  |
help: consider changing this to be mutable
  |
6 |     let mut parser = DDEXParser::new();
  |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
  --> packages/ddex-parser/tests/error_contract_test.rs:17:18
   |
17 |     let result = parser.parse(std::io::Cursor::new(empty.as_bytes()));
   |                  ^^^^^^ cannot borrow as mutable
   |
help: consider changing this to be mutable
   |
15 |     let mut parser = DDEXParser::new();
   |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
  --> packages/ddex-parser/tests/error_contract_test.rs:25:18
   |
25 |     let result = parser.parse(std::io::Cursor::new(malformed.as_bytes()));
   |                  ^^^^^^ cannot borrow as mutable
   |
help: consider changing this to be mutable
   |
23 |     let mut parser = DDEXParser::new();
   |         +++

For more information about this error, try `rustc --explain E0596`.
warning: this import is redundant
 --> packages/ddex-parser/tests/final_v0_4_0_validation.rs:6:1
  |
6 | use chrono;
  | ^^^^^^^^^^^ help: remove it entirely
  |
  = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports
  = note: `#[warn(clippy::single_component_path_imports)]` on by default

warning: ddex-parser@0.4.0: Generating TypeScript definitions...
error: could not compile `ddex-parser` (test "error_contract_test") due to 3 previous errors
warning: build failed, waiting for other jobs to finish...
error[E0308]: mismatched types
  --> packages/ddex-parser/examples/fast_streaming_usage.rs:41:43
   |
41 |     let iterator = parser.parse_streaming(reader, None)?;
   |                           --------------- ^^^^^^ expected `&mut _`, found `BufReader<Cursor<&[u8]>>`
   |                           |
   |                           arguments to this method are incorrect
   |
   = note: expected mutable reference `&mut _`
                         found struct `std::io::BufReader<std::io::Cursor<&[u8]>>`
note: method defined here
  --> /Users/kevinmoo/Desktop/localrepo/ddex-suite/packages/ddex-parser/src/streaming/fast_streaming_parser.rs:89:12
   |
89 |     pub fn parse_streaming<R: BufRead>(
   |            ^^^^^^^^^^^^^^^
help: consider mutably borrowing here
   |
41 |     let iterator = parser.parse_streaming(&mut reader, None)?;
   |                                           ++++

warning: function `summarize_test_results` is never used
   --> packages/ddex-parser/tests/test_categories.rs:159:8
    |
159 | pub fn summarize_test_results(
    |        ^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(dead_code)]` on by default

warning: trait `StringRepeat` is never used
   --> packages/ddex-parser/tests/test_categories.rs:206:7
    |
206 | trait StringRepeat {
    |       ^^^^^^^^^^^^

warning: `ddex-parser` (test "final_v0_4_0_validation") generated 1 warning (run `cargo clippy --fix --test "final_v0_4_0_validation"` to apply 1 suggestion)
error[E0308]: mismatched types
  --> packages/ddex-parser/examples/fast_streaming_usage.rs:94:43
   |
94 |     let iterator = parser.parse_streaming(reader, Some(progress_callback))?;
   |                           --------------- ^^^^^^ expected `&mut _`, found `BufReader<Cursor<&[u8]>>`
   |                           |
   |                           arguments to this method are incorrect
   |
   = note: expected mutable reference `&mut _`
                         found struct `std::io::BufReader<std::io::Cursor<&[u8]>>`
note: method defined here
  --> /Users/kevinmoo/Desktop/localrepo/ddex-suite/packages/ddex-parser/src/streaming/fast_streaming_parser.rs:89:12
   |
89 |     pub fn parse_streaming<R: BufRead>(
   |            ^^^^^^^^^^^^^^^
help: consider mutably borrowing here
   |
94 |     let iterator = parser.parse_streaming(&mut reader, Some(progress_callback))?;
   |                                           ++++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/v0_4_0_final_tests.rs:831:11
    |
831 |     match parser.parse(cursor) {
    |           ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
828 |     let mut parser = DDEXParser::new();
    |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/v0_4_0_final_tests.rs:925:15
    |
925 |         match parser.parse(cursor) {
    |               ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
922 |         let mut parser = DDEXParser::new();
    |             +++

warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used
   --> packages/ddex-parser/tests/improved_failing_tests.rs:245:25
    |
245 | /                         for attr in e.attributes() {
246 | |                             if let Ok(attr) = attr {
247 | |                                 let key = std::str::from_utf8(attr.key.as_ref()).unwrap_or("?");
248 | |                                 if key == "ReleaseReference" {
...   |
254 | |                         }
    | |_________________________^
    |
help: try `.flatten()` and remove the `if let` statement in the for loop
   --> packages/ddex-parser/tests/improved_failing_tests.rs:246:29
    |
246 | / ...                   if let Ok(attr) = attr {
247 | | ...                       let key = std::str::from_utf8(attr.key.as_ref()).unwrap_or("?");
248 | | ...                       if key == "ReleaseReference" {
249 | | ...                           current_release = Some(
...   |
253 | | ...                   }
    | |_______________________^
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten
    = note: `#[warn(clippy::manual_flatten)]` on by default
help: try
    |
245 ~                         for attr in e.attributes().flatten() {
246 +                             let key = std::str::from_utf8(attr.key.as_ref()).unwrap_or("?");
247 +                             if key == "ReleaseReference" {
248 +                                 current_release = Some(
249 +                                     std::str::from_utf8(&attr.value).unwrap_or("?").to_string()
250 +                                 );
251 +                             }
252 +                         }
    |

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
    --> packages/ddex-parser/tests/v0_4_0_final_tests.rs:1177:11
     |
1177 |     match parser.parse(cursor) {
     |           ^^^^^^ cannot borrow as mutable
     |
help: consider changing this to be mutable
     |
1174 |     let mut parser = DDEXParser::new();
     |         +++

error[E0308]: mismatched types
   --> packages/ddex-parser/examples/fast_streaming_usage.rs:163:43
    |
163 |     let iterator = parser.parse_streaming(reader, Some(progress_callback))?;
    |                           --------------- ^^^^^^ expected `&mut _`, found `BufReader<Cursor<&[u8]>>`
    |                           |
    |                           arguments to this method are incorrect
    |
    = note: expected mutable reference `&mut _`
                          found struct `std::io::BufReader<std::io::Cursor<&[u8]>>`
note: method defined here
   --> /Users/kevinmoo/Desktop/localrepo/ddex-suite/packages/ddex-parser/src/streaming/fast_streaming_parser.rs:89:12
    |
89  |     pub fn parse_streaming<R: BufRead>(
    |            ^^^^^^^^^^^^^^^
help: consider mutably borrowing here
    |
163 |     let iterator = parser.parse_streaming(&mut reader, Some(progress_callback))?;
    |                                           ++++

error[E0308]: mismatched types
   --> packages/ddex-parser/examples/fast_streaming_usage.rs:239:47
    |
239 |         let iterator = parser.parse_streaming(reader, None)?;
    |                               --------------- ^^^^^^ expected `&mut _`, found `BufReader<Cursor<&[u8]>>`
    |                               |
    |                               arguments to this method are incorrect
    |
    = note: expected mutable reference `&mut _`
                          found struct `std::io::BufReader<std::io::Cursor<&[u8]>>`
note: method defined here
   --> /Users/kevinmoo/Desktop/localrepo/ddex-suite/packages/ddex-parser/src/streaming/fast_streaming_parser.rs:89:12
    |
89  |     pub fn parse_streaming<R: BufRead>(
    |            ^^^^^^^^^^^^^^^
help: consider mutably borrowing here
    |
239 |         let iterator = parser.parse_streaming(&mut reader, None)?;
    |                                               ++++

warning: ddex-parser@0.4.0: Generating TypeScript definitions...
error: could not compile `ddex-parser` (test "v0_4_0_final_tests") due to 3 previous errors
For more information about this error, try `rustc --explain E0308`.
error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
  --> packages/ddex-parser/tests/depth_limit_test.rs:15:18
   |
15 |     let result = parser.parse(cursor);
   |                  ^^^^^^ cannot borrow as mutable
   |
help: consider changing this to be mutable
   |
12 |     let mut parser = DDEXParser::with_config(security_config);
   |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
  --> packages/ddex-parser/tests/depth_limit_test.rs:36:11
   |
36 |     match parser.parse(cursor) {
   |           ^^^^^^ cannot borrow as mutable
   |
help: consider changing this to be mutable
   |
31 |     let mut parser = DDEXParser::new();
   |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
  --> packages/ddex-parser/tests/depth_limit_test.rs:55:18
   |
55 |     let result = parser.parse(cursor);
   |                  ^^^^^^ cannot borrow as mutable
   |
help: consider changing this to be mutable
   |
53 |     let mut parser = DDEXParser::with_config(security_config);
   |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
  --> packages/ddex-parser/tests/depth_limit_test.rs:76:11
   |
76 |     match parser.parse(cursor) {
   |           ^^^^^^ cannot borrow as mutable
   |
help: consider changing this to be mutable
   |
71 |     let mut parser = DDEXParser::with_config(security_config);
   |         +++

warning: ddex-parser@0.4.0: Generating TypeScript definitions...
error: could not compile `ddex-parser` (example "fast_streaming_usage") due to 4 previous errors
warning: `ddex-parser` (test "improved_failing_tests") generated 4 warnings (run `cargo clippy --fix --test "improved_failing_tests"` to apply 2 suggestions)
warning: ddex-parser@0.4.0: Generating TypeScript definitions...
error: could not compile `ddex-parser` (test "depth_limit_test") due to 4 previous errors
warning: unused import: `ddex_parser::parser::security::SecurityConfig`
 --> packages/ddex-parser/tests/utf8_handling_test.rs:1:5
  |
1 | use ddex_parser::parser::security::SecurityConfig;
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
  --> packages/ddex-parser/tests/utf8_handling_test.rs:34:18
   |
34 |     let result = parser.parse(cursor).unwrap();
   |                  ^^^^^^ cannot borrow as mutable
   |
help: consider changing this to be mutable
   |
32 |     let mut parser = DDEXParser::new();
   |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
  --> packages/ddex-parser/tests/utf8_handling_test.rs:72:18
   |
72 |     let result = parser.parse(cursor);
   |                  ^^^^^^ cannot borrow as mutable
   |
help: consider changing this to be mutable
   |
70 |     let mut parser = DDEXParser::new();
   |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/utf8_handling_test.rs:110:18
    |
110 |     let result = parser.parse(cursor);
    |                  ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
108 |     let mut parser = DDEXParser::new();
    |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/utf8_handling_test.rs:145:18
    |
145 |     let result = parser.parse(cursor);
    |                  ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
143 |     let mut parser = DDEXParser::new();
    |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/utf8_handling_test.rs:183:18
    |
183 |     let result = parser.parse(cursor);
    |                  ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
181 |     let mut parser = DDEXParser::new();
    |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/utf8_handling_test.rs:229:18
    |
229 |     let result = parser.parse(cursor);
    |                  ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
227 |     let mut parser = DDEXParser::new();
    |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/utf8_handling_test.rs:281:18
    |
281 |     let result = parser.parse(cursor);
    |                  ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
279 |     let mut parser = DDEXParser::new();
    |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/utf8_handling_test.rs:317:18
    |
317 |     let result = parser.parse(cursor);
    |                  ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
315 |     let mut parser = DDEXParser::new();
    |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/utf8_handling_test.rs:351:18
    |
351 |     let result = parser.parse(cursor);
    |                  ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
349 |     let mut parser = DDEXParser::new();
    |         +++

error[E0596]: cannot borrow `parser` as mutable, as it is not declared as mutable
   --> packages/ddex-parser/tests/utf8_handling_test.rs:391:18
    |
391 |     let result = parser.parse(cursor);
    |                  ^^^^^^ cannot borrow as mutable
    |
help: consider changing this to be mutable
    |
389 |     let mut parser = DDEXParser::new();
    |         +++

warning: `ddex-parser` (test "utf8_handling_test") generated 1 warning
warning: ddex-parser@0.4.0: Generating TypeScript definitions...
error: could not compile `ddex-parser` (test "utf8_handling_test") due to 10 previous errors; 1 warning emitted
