content: {-
    Copyright (c) Meta Platforms, Inc. and affiliates.
    All rights reserved.
  
    This source code is licensed under the BSD-style license found in the
    LICENSE file in the root directory of this source tree.
  -}
  
  module Glean.Logger.Server (
      GleanServerLog(..),
      GleanServerLogger(..),
      NullGleanServerLogger(..),
    ) where
  
  import Data.Text (Text)
  
  class GleanServerLogger l where
    runLog :: l -> GleanServerLog -> IO ()
  
  data GleanServerLog
    = GleanServerLogEmpty
    | GleanServerLogAnd GleanServerLog GleanServerLog
    | SetSuccess Bool
    | SetError Text
    | SetTimeElapsed Double
    | SetAllocatedBytes Int
    | SetMethod Text
    | SetWeight Int
    | SetRepoName Text
    | SetRepoHash Text
    | SetQuery Text
    | SetPredicate Text
    | SetPredicateVersion Int
    | SetSchemaVersion Int
    | SetNoBase64Binary Bool
    | SetExpandResults Bool
    | SetRecursive Bool
    | SetMaxResults Int
    | SetTruncated Bool
    | SetResults Int
    | SetFacts Int
    | SetFullScans [Text]
    | SetSyntax Text
    | SetType Text
    | SetBytecodeSize Int
    | SetCompileTimeUs Int
    | SetExecuteTimeUs Int
    | SetQueryResultBytes Int
    | SetClientUnixname Text
    | SetClientApplication Text
    | SetClientName Text
    | SetRequestContinuationSize Int
    | SetResponseContinuationSize Int
    | SetSchemaId Text
    | SetBatchFactsSize Int
    | SetBatchFactsCount Int
    | SetBatchOwnedSize Int
    | SetBatchDependenciesSize Int
  
  instance Semigroup GleanServerLog where
    a <> b = GleanServerLogAnd a b
  
  instance Monoid GleanServerLog where
    mempty = GleanServerLogEmpty
  
  data NullGleanServerLogger = NullGleanServerLogger
  
  instance GleanServerLogger NullGleanServerLogger where
    runLog _ _ = return ()
  