ResponseBuffer.swift 753 B

123456789101112131415161718192021222324252627282930313233
  1. //
  2. // ResponseBuffer.swift
  3. // RileyLinkBLEKit
  4. //
  5. // Copyright © 2018 Pete Schwamb. All rights reserved.
  6. //
  7. /// Represents a data buffer containing one or more responses
  8. struct ResponseBuffer<R: Response> {
  9. let endMarker: UInt8
  10. private var data = Data()
  11. init(endMarker: UInt8) {
  12. self.endMarker = endMarker
  13. }
  14. mutating func append(_ other: Data) {
  15. data.append(other)
  16. }
  17. var responses: [R] {
  18. let segments = data.split(separator: endMarker, omittingEmptySubsequences: false)
  19. // If we haven't received at least one endMarker, we don't have a response.
  20. guard segments.count > 1 else {
  21. return []
  22. }
  23. return segments.compactMap { R(legacyData: $0) }
  24. }
  25. }