A progress token can be a string or number
- string (s : String) : ProgressToken
- number (n : Int) : ProgressToken
Instances For
Equations
- Lapis.Server.Progress.instBEqProgressToken.beq (Lapis.Server.Progress.ProgressToken.string a) (Lapis.Server.Progress.ProgressToken.string b) = (a == b)
- Lapis.Server.Progress.instBEqProgressToken.beq (Lapis.Server.Progress.ProgressToken.number a) (Lapis.Server.Progress.ProgressToken.number b) = (a == b)
- Lapis.Server.Progress.instBEqProgressToken.beq x✝¹ x✝ = false
Instances For
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
State of an active progress operation
- token : ProgressToken
- title : String
- cancellable : Bool
- started : Bool
Instances For
Manages active progress tokens and their lifecycle
- activeProgress : IO.Ref (Std.HashMap String ProgressState)
Active progress operations
- tokenCounter : Concurrent.AtomicCounter
Counter for generating unique tokens
- outputChannel : Transport.OutputChannel
Output channel for sending notifications
- pendingResponses : Receiver.PendingResponses
Pending responses for create requests
Instances For
def
Lapis.Server.Progress.ProgressManager.new
(outputChannel : Transport.OutputChannel)
(pendingResponses : Receiver.PendingResponses)
:
Create a new progress manager
Equations
- One or more equations did not get rendered due to their size.
Instances For
Generate a unique progress token
Equations
- pm.generateToken = do let n ← pm.tokenCounter.incrementAndGet pure (Lapis.Server.Progress.ProgressToken.number (Int.ofNat n))
Instances For
def
Lapis.Server.Progress.ProgressManager.createToken
(pm : ProgressManager)
(token : ProgressToken)
:
Request the client to create a progress token (for server-initiated progress)
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Lapis.Server.Progress.ProgressManager.begin
(pm : ProgressManager)
(token : ProgressToken)
(title : String)
(cancellable : Bool := false)
(message : Option String := none)
(percentage : Option Nat := none)
:
Begin a progress operation
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Lapis.Server.Progress.ProgressManager.report
(pm : ProgressManager)
(token : ProgressToken)
(message : Option String := none)
(percentage : Option Nat := none)
(cancellable : Option Bool := none)
:
Report progress update
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Lapis.Server.Progress.ProgressManager.end
(pm : ProgressManager)
(token : ProgressToken)
(message : Option String := none)
:
End a progress operation
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Lapis.Server.Progress.ProgressManager.isCancelled
(pm : ProgressManager)
(token : ProgressToken)
:
Check if a progress operation was cancelled
Equations
- pm.isCancelled token = do let active ← ST.Ref.get pm.activeProgress match active.get? (toString token) with | some state => ST.Ref.get state.cancelled | none => pure true
Instances For
def
Lapis.Server.Progress.ProgressManager.markCancelled
(pm : ProgressManager)
(token : ProgressToken)
:
Mark a progress operation as cancelled (called when client sends cancel)
Equations
- pm.markCancelled token = do let active ← ST.Ref.get pm.activeProgress match active.get? (toString token) with | some state => ST.Ref.set state.cancelled true | x => pure PUnit.unit
Instances For
def
Lapis.Server.Progress.ProgressManager.withProgress
{α : Type}
(pm : ProgressManager)
(title : String)
(cancellable : Bool := false)
(action : ProgressToken → IO α)
:
IO α
Run an action with progress reporting
Equations
- One or more equations did not get rendered due to their size.
Instances For
A handle for reporting progress within an operation
- manager : ProgressManager
- token : ProgressToken
Instances For
Throw if cancelled
Equations
- h.checkCancelled = do let __do_lift ← h.isCancelled if __do_lift = true then throw (IO.userError "Operation cancelled") else pure PUnit.unit