struct
  type t = [
    | `Act of Action.t | `Get of Key_in_collection.t | `Get_all of string
    | `Load of string | `Close
    | `Iter of string
  ] * string

  let to_string (t : t) =
    match t with
    | (`Act k, e) -> sprintf "[Executing %s, Error: %s]" (Action.to_string k) e
    | (`Close, e) -> sprintf "[Closing, %s]" e
    | (`Get k, e) ->
      sprintf "[Getting %s, Error: %s]" (Key_in_collection.to_string k) e
    | (`Get_all c, e) -> sprintf "[Getting-all-in %s, Error: %s]" c e
    | (`Load u, e) -> sprintf "[Loading %S, Error: %s]" u e
    | (`Iter s, e) -> sprintf "[Iterating on %S, Error: %s]" s e
end