# 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 ); }