class Karafka::Params::Params
It provides lazy loading not only until the first usage, but also allows us to skip using deserializer until we execute our logic. That way we can operate with heavy-deserialization data without slowing down the whole application.
Attributes
metadata[R]
raw_payload[R]
Public Class Methods
new(raw_payload, metadata)
click to toggle source
@param raw_payload
[Object] incoming payload before deserialization @param metadata [Karafka::Params::Metadata] message metadata object
# File lib/karafka/params/params.rb, line 18 def initialize(raw_payload, metadata) @raw_payload = raw_payload @metadata = metadata @deserialized = false @payload = nil end
Public Instance Methods
deserialized?()
click to toggle source
@return [Boolean] did given params payload were deserialized already
# File lib/karafka/params/params.rb, line 37 def deserialized? @deserialized end
payload()
click to toggle source
@return [Object] lazy-deserialized data (deserialized upon first request)
# File lib/karafka/params/params.rb, line 26 def payload return @payload if deserialized? @payload = deserialize # We mark deserialization as successful after deserialization, as in case of an error # this won't be falsely set to true @deserialized = true @payload end
Private Instance Methods
deserialize()
click to toggle source
@return [Object] tries de-serializes data
# File lib/karafka/params/params.rb, line 44 def deserialize Karafka.monitor.instrument('params.params.deserialize', caller: self) do metadata.deserializer.call(self) end rescue ::StandardError => e Karafka.monitor.instrument('params.params.deserialize.error', caller: self, error: e) raise e end