1. 04 Jul, 2019 1 commit
    • Nathan Harris's avatar
      59 -- Use `RESPValueConvertible` as Generic Constraint · fa227b0e
      Nathan Harris authored
      Motivation:
      
      Johannes continues to provide great insight, and correctly pointed out that `RESPValueConvertible` was being used as an "existential" in all cases.
      
      This can cause unexpected type-erasure and introduce unnecessary cost overhead with dynamic dispatch when in most cases we know the exact value we want for `RESPValue` to execute commands.
      
      Modifications:
      
      - Add new extensions to `Array where Element == RESPValue` for appending and adding elements into them
      - Change `RedisClient.send(command:with:)` to require `[RESPValue]` instead of `[RESPValueConvertible]` as the `with` argument type
      - Change all instances of `RESPValueConvertible` being an "existential" type for method arguments to instead be a generic constraint
      
      Result:
      
      The library should be safeguarded from a class of bugs, with the use of `send` being a bit more straight forward, with some new convenience methods for `[RESPValue]` types.
      fa227b0e
  2. 03 Jul, 2019 16 commits
    • Nathan Harris's avatar
      Merge branch 'cleanup-unsafe' into '47-proposal-feedback' · e964ba04
      Nathan Harris authored
      Revisit `RESPValue` and `RESPValueConvertible` implementations.
      
      See merge request Mordil/swift-redis-nio-client!67
      e964ba04
    • Nathan Harris's avatar
      Revisit `RESPValue` and `RESPValueConvertible` implementations. · cd9bd04f
      Nathan Harris authored
      Motivation:
      
      Johannes provided a fair code review of the project and summarized his findings in issue #48, and one of the prime offenders was all of the `unsafe*` APIs (pointers, buffers, bytes)
      that were used with `RESPValue` and `RESPValueConvertible`.
      
      He also provided great feedback and pointed out good points of confusion with the API design of `RESPValue` and `RESPValueConvertible`.
      
      Modifications:
      
      - Return to using `Array` instead of `ContiguousArray` for `RESPValue.array` storage
      - Update all documentation to be more thorough in explaining how the types should be used and conformed to.
      - Remove all uses of `unsafe*` APIs where possible
      - Change implementations to be a lot more type and memory safe, double checking assumptions
      - Remove conformance to `ExpressibleBy*Literal` as it is too easy for users to shoot themselves in the foot and saves only a few characters over `.init(bulk:)`
      - Create new `RedisNIOTestUtils` target for common test extensions, making them public
      - Move most almost all implementations of `RESPValue` computed properties into the `RESPValueConvertible` conformances
      
      Result:
      
      Users should be more safeguarded by the API against unknowingly getting incorrect `RESPValue` representations, the API design of `RESPValue` and `RESPValueConvertible` should be much clearer,
      and memory safety should be at a higher bar from these changes.
      
      This resolves issues #55 & #48, and contributes to issue #47.
      cd9bd04f
    • Nathan Harris's avatar
      Merge branch 'redis-command' into '47-proposal-feedback' · f445822c
      Nathan Harris authored
      Rename `RedisCommandContext` to `RedisCommand`, improve `RedisCommandHandler`...
      
      See merge request Mordil/swift-redis-nio-client!66
      f445822c
    • Nathan Harris's avatar
      Merge branch 'expire-timeout' into '47-proposal-feedback' · 15a3c038
      Nathan Harris authored
      Update `RedisClient.expire` to no longer use `deadline` terminology.
      
      See merge request Mordil/swift-redis-nio-client!65
      15a3c038
    • Nathan Harris's avatar
      Rename `RedisCommandContext` to `RedisCommand`, improve `RedisCommandHandler`... · 5fb0bfca
      Nathan Harris authored
      Rename `RedisCommandContext` to `RedisCommand`, improve `RedisCommandHandler` usage semantics, and cleanup documentation.
      
      Motivation:
      
      During proposal review, it was noted that `RedisCommandContext` was a bit misleading, and the hidden reference semantics worrisome.
      
      In addition, several of parts of the documentation around `RedisCommandHandler` were weak or also misleading.
      
      Modifications:
      
      - Rename `RedisCommandContext` to just `RedisCommand`
      - Update documentation to be more explicit about the module who owns the types being referenced
      - Update documentation to call out explicit usage semantics and behavior
      - Change `RedisCommandHandler` to close the socket connection on error thrown
      - Rename the "base" Redis Channel Handlers to be more explicitly named
      
      Result:
      
      Users should have clearer documentation on what happens when using `RedisCommandHandler` and `RedisCommand` without hidden semantics.
      
      This contributes to issue #47.
      5fb0bfca
    • Nathan Harris's avatar
      Update `RedisClient.expire` to no longer use `deadline` terminology. · b96f64c7
      Nathan Harris authored
      Motivation:
      
      During proposal review, it was appropriately pointed out that `RedisClient.expire` incorrectly mixes 'deadline' and 'timeout' terminology.
      
      Modifications:
      
      - Change references of 'deadline' to 'timeout' to follow Redis' established semantics for 'EXPIRE'
      - Add additional unit test for `RedisClient.expire`
      
      Result:
      
      `RedisClient.expire` should now be more clear as to its semantics and not mix terminology incorrectly.
      
      This contributes to issue #47
      b96f64c7
    • Nathan Harris's avatar
      Merge branch 'client-bootstrap' into '47-proposal-feedback' · c5241a46
      Nathan Harris authored
      Change `Redis.makeDefaultClientBootstrap` to `ClientBootstrap.makeRedisTCPClient`
      
      See merge request Mordil/swift-redis-nio-client!64
      c5241a46
    • Nathan Harris's avatar
      Change `Redis.makeDefaultClientBootstrap` to `ClientBootstrap.makeRedisTCPClient` · 5d232ad0
      Nathan Harris authored
      Motivation:
      
      During proposal review, feedback was provided that the discoverability of the factory method for building a standard RESP `ChannelPipeline` was poor outside of documentation.
      
      Modifications:
      
      - Move `Redis.makeDefaultClientBootstrap` to `ClientBootstrap.makeRedisTCPClient`.
      - Move the `channelInitializer` implementation into a new `Channel.addBaseRedisHandlers()` instance method.
      
      Result:
      
      Users should have an easier time discovering how to easily create baseline RESP `ChannelPipelines`.
      
      This contributes to #47.
      5d232ad0
    • Nathan Harris's avatar
      Merge branch 'resp-translator-refactor' into '47-proposal-feedback' · dc0b7e8b
      Nathan Harris authored
      Refactor `RESPTranslator` to mutate the passed `ByteBuffer` directly.
      
      See merge request Mordil/swift-redis-nio-client!63
      dc0b7e8b
    • Nathan Harris's avatar
      Merge branch 'init-label' into '47-proposal-feedback' · 44c29169
      Nathan Harris authored
      Add `fromRESP` label to `RESPValueConvertible.init`
      
      See merge request Mordil/swift-redis-nio-client!56
      44c29169
    • Nathan Harris's avatar
      Refactor `RESPTranslator` to mutate the passed `ByteBuffer` directly. · b8c19488
      Nathan Harris authored
      Motivation:
      
      During proposal review, it was pointed out that the code with a position index was redundant and error prone over relying on `ByteBuffer`'s `readerIndex`.
      
      Modifications:
      
      Refactored `RESPTranslator` to rely on `ByteBuffer.readerIndex` for position of current parsing cursor,
      and eliminated `ParsingResult` enum to instead return `RESPValue?`.
      
      The implementation for writing out `RESPValue` has been expanded to `RESPValueConvertible` and moved to an extension of `ByteBuffer`.
      
      Result:
      
      Parsing `RESPValue` into and out of `ByteBuffer` should be less error-prone and more straight forward.
      
      This contributes to issues #47 and #55
      b8c19488
    • Nathan Harris's avatar
      Merge branch 'final-channelhandler' into '47-proposal-feedback' · f98b53e3
      Nathan Harris authored
      Make `RedisCommandHandler` final
      
      See merge request Mordil/swift-redis-nio-client!55
      f98b53e3
    • Nathan Harris's avatar
      Add `fromRESP` label to `RESPValueConvertible.init` · 60d5c4ce
      Nathan Harris authored
      Motivation:
      
      During SSWG review, feedback was provided on the API design of the `RESPValueConvertible.init` signature and how it should appropriately follow Swift Design Guidelines regarding labels.
      
      Modifications:
      
      `RESPValueConvertible.init(_:` is now `RESPValueConvertible.init(fromRESP:)`.
      
      Result:
      
      There should be more clarity at the call site when initializing a type from a `RESPValue`.
      
      This contributes to #47
      60d5c4ce
    • Nathan Harris's avatar
      Make `RedisCommandHandler` final · 1281724a
      Nathan Harris authored
      Motivation:
      
      During SSWG review, feedback was provided that forced a re-evaluation of early design feedback interpretation on composability of RedisNIO.
      
      First understanding was that the desire was to have "customization points" to gain benefits of implementation of RedisCommandHandler, while new understanding is that it just needs to be public in order for users to include it in their own custom ChannelPipeline schemes.
      
      Modifications:
      
      `RedisCommandHandler` is now a final class.
      
      Result:
      
      Users will no longer be able to subclass `RedisCommandHandler`, but gain a super slight performance increase.
      
      This contributes to #47.
      1281724a
    • Nathan Harris's avatar
      Merge branch '58-5.1-testing' into 'master' · cc477734
      Nathan Harris authored
      58 -- Add Swift 5.1 and Nightly Build Testing
      
      Closes #58
      
      See merge request Mordil/swift-redis-nio-client!68
      cc477734
    • Nathan Harris's avatar
      0eb30744
  3. 25 Jun, 2019 6 commits
  4. 22 Jun, 2019 6 commits
  5. 12 Jun, 2019 2 commits
    • Nathan Harris's avatar
      Merge branch 'add-port-static' into 'master' · 531a7d40
      Nathan Harris authored
      Add static property for default RedisConnection port
      
      See merge request Mordil/swift-redis-nio-client!51
      531a7d40
    • Nathan Harris's avatar
      Add static property for default RedisConnection port · 73b3f5df
      Nathan Harris authored
      Motivation:
      
      The default port for Redis is well published to be 6379, and it is common to want to pass this value around or use it as a static default value in methods and initializers.
      
      Modifications:
      
      Add `RedisConnection.defaultPort` static property for all users to use, and update references of the `6379` literals to use new  the new property.
      
      Result:
      
      Users should have a reliable default defined to use everywhere to avoid bugs.
      73b3f5df
  6. 11 Jun, 2019 4 commits
    • Nathan Harris's avatar
      Merge branch 'fix-data-conversion' into 'master' · 30733dea
      Nathan Harris authored
      Fix `Data` Conversion to `RESPValue`
      
      See merge request Mordil/swift-redis-nio-client!50
      30733dea
    • Nathan Harris's avatar
      Fix `Data` Conversion to `RESPValue` · 34647e14
      Nathan Harris authored
      Motivation:
      
      `Foundation.Data` was unexpectedly receiving `RESPValueConvertible` conformance through the `Collection` extension which lead to incorrect encoding.
      
      Modifications:
      
      Add explicit conformance to `RESPValueConvertible` for `Data`.
      
      Result:
      
      Users should see their `Data` encoding to RESP format as expected.
      34647e14
    • Nathan Harris's avatar
    • Nathan Harris's avatar
      Improve debugging of `RESPValue` · d4584924
      Nathan Harris authored
      Motivation:
      
      Reading output from `RESPValue` existentials is entirely verbose and does not provide a human-readable description of what is being represented.
      
      Modifications:
      
      - Add conformance to `CustomStringConvertible` for `RESPValue`
      - Remove redundant logging of arguments in `RedisConnection.send`
      
      Result:
      
      String representations of `RESPValue` should now be more readable for human to understand.
      d4584924
  7. 07 Jun, 2019 5 commits
    • Nathan Harris's avatar
      Merge branch 'docs-tweak' into 'master' · d4848586
      Nathan Harris authored
      Fix README and API Docs
      
      See merge request Mordil/swift-redis-nio-client!49
      d4848586
    • Nathan Harris's avatar
      Fix README and API Docs · 06c0aeed
      Nathan Harris authored
      Motivation:
      
      The emojis in the README were not rendered consistently in the docs and on different screen form factors making a poor UX.
      
      Modifications:
      
      The CI config now properly sends the custom theme to Jazzy, and the README no longer has the `🔔` emoji in the disclaimer header.
      
      Result:
      
      A consistent UX with the README and proper API docs referring to GitLab
      06c0aeed
    • Nathan Harris's avatar
      Update README · 23a8d445
      Nathan Harris authored
      Motivation:
      
      After moving to GitLab, and while still having a GitHub mirror, it is important to drive people to the proper location for getting help and reporting bugs or feature requests.
      
      Also, some information should be updated to include new tags, formatting, and a link to the new API docs.
      
      Modifications:
      
      README is updated to point users to the GitLab repository and to have up-to-date information about the project.
      
      Result:
      
      Users should know where to reach project maintainers and where to find documentation.
      23a8d445
    • Nathan Harris's avatar
      Merge branch '45-api-docs' into 'master' · 3b5faf04
      Nathan Harris authored
      45 -- Add API Documentation
      
      See merge request Mordil/swift-redis-nio-client!48
      3b5faf04
    • Nathan Harris's avatar
      45 -- Add API Documentation · dd839fdf
      Nathan Harris authored
      Motivation:
      
      Users need a quick reference available online that is up to date.
      
      Modifications:
      
      Add CI job to generate and publish API docs with Jazzy
      
      Result:
      
      Users can view API docs that are updated when new releases are tagged at https://mordil.gitlab.io/swift-redis-nio-client
      dd839fdf