packages feed

glean-0.1.0.0: glean/schema/source/glass.angle

# Copyright (c) Meta Platforms, Inc. and affiliates.

schema glass.1 {

import src
import digest
import codemarkup

# Everything we need to initialize a file info for querying in Glass
type FileMetadata = {
  indexed: bool,
  offsets: maybe src.FileLines,
  digest: maybe digest.Digest,
  indexFailure: maybe src.IndexFailure
}

# Key by filepath to get blob of metadata back.
# This is how src.File facts and their related data are introduced into Glass
predicate FileInfo:
  {
    file: src.File,
    info: FileMetadata
  }
  { File, { Indexed, MOffsets, MDigest, MFailure } } where
    src.File _ = File; # binding occurence
    MOffsets =
      if (Offsets = src.FileLines { file = File } )
      then ( { just = Offsets } )
      else ( nothing );
    MDigest =
      if (digest.FileDigest { File, Digest })
      then ( { just = Digest } )
      else ( nothing );
    Indexed = if (codemarkup.IndexedFile File) then (true) else (false);
    MFailure =
      if (F = src.IndexFailure { file = File } )
      then ( { just = F } )
      else ( nothing );

}