wire-subsystems-0.1.0
Safe HaskellSafe-Inferred
LanguageGHC2021

Wire.UserStore.Unique

Contents

Description

Temporary exclusive claims on Textual values which may be subject to contention, i.e. where strong guarantees on uniqueness are desired.

Synopsis

Documentation

withClaim Source #

Arguments

:: Id a

The Id associated with the claim.

-> Text

The value on which to acquire the claim.

-> Timeout

The minimum timeout (i.e. duration) of the claim.

-> Client b

The computation to run with a successful claim.

-> Client (Maybe b)

'Just b' if the claim was successful and the IO computation completed within the given timeout.

Obtain a (temporary) exclusive claim on a Text value for some Identifier. The claim expires after the provided timeout, whether it was successful or not. Contention can thus render the value unavailable until the timeout expires if no contender succeeds. The given IO computation is only run when the claim was successful and is responsible for turning the temporary claim into permanent ownership, if desired.

deleteClaim Source #

Arguments

:: Id a

The Id associated with the claim.

-> Text

The value on which to acquire the claim.

-> Timeout

The minimum timeout (i.e. duration) of the rest of the claim. (Each claim can have more than one claimer (even though this is a feature we never use), so removing a claim is an update operation on the database. Therefore, we reset the TTL the same way we reset it in withClaim.)

-> Client () 

lookupClaims :: MonadClient m => Text -> m [Id a] Source #

Lookup the current claims on a value.

Re-exports

data Timeout Source #

Timeout in nanoseconds. The Printable instance renders timeouts as series of AmountUnit tokens, e.g.

     toString (1 # Day + 1500 # MilliSecond) = "1d1s500ms"
  

The full list of timeout unit abbreviations:

The Textual instance accepts this syntax and allows decimal fractions to be used as amounts:

    fmap toString (fromStringAs aTimeout "1m1.5s0.2us") = Just "1m1s500ms200ns"
  

Instances

Instances details
Bounded Timeout 
Instance details

Defined in Data.Timeout

Enum Timeout 
Instance details

Defined in Data.Timeout

Ix Timeout 
Instance details

Defined in Data.Timeout

Num Timeout 
Instance details

Defined in Data.Timeout

Read Timeout 
Instance details

Defined in Data.Timeout

Integral Timeout 
Instance details

Defined in Data.Timeout

Real Timeout 
Instance details

Defined in Data.Timeout

Show Timeout 
Instance details

Defined in Data.Timeout

Printable Timeout 
Instance details

Defined in Data.Timeout

Methods

print :: Printer p => Timeout -> p Source #

Textual Timeout 
Instance details

Defined in Data.Timeout

Methods

textual :: (Monad μ, CharParsing μ) => μ Timeout Source #

Eq Timeout 
Instance details

Defined in Data.Timeout

Methods

(==) :: Timeout -> Timeout -> Bool #

(/=) :: Timeout -> Timeout -> Bool #

Ord Timeout 
Instance details

Defined in Data.Timeout

data TimeoutUnit Source #

Timeout unit.

Instances

Instances details
Bounded TimeoutUnit 
Instance details

Defined in Data.Timeout

Enum TimeoutUnit 
Instance details

Defined in Data.Timeout

Ix TimeoutUnit 
Instance details

Defined in Data.Timeout

Read TimeoutUnit 
Instance details

Defined in Data.Timeout

Show TimeoutUnit 
Instance details

Defined in Data.Timeout

Printable TimeoutUnit 
Instance details

Defined in Data.Timeout

Methods

print :: Printer p => TimeoutUnit -> p Source #

Textual TimeoutUnit 
Instance details

Defined in Data.Timeout

Methods

textual :: (Monad μ, CharParsing μ) => μ TimeoutUnit Source #

Eq TimeoutUnit 
Instance details

Defined in Data.Timeout

Ord TimeoutUnit 
Instance details

Defined in Data.Timeout

(#) :: Word64 -> TimeoutUnit -> Timeout infix 9 Source #

Convert the given number of timeout units to Timeout.