herringbone-0.1.1: Web/Herringbone/Internal/FindAsset.hs
module Web.Herringbone.Internal.FindAsset where
import Web.Herringbone.Internal.GetBuildMapping
import Web.Herringbone.Internal.BuildAsset
import Web.Herringbone.Internal.Types
-- | The most important function in this library. Attempts to find the asset
-- referenced by the given 'LogicalPath', compiles it if necessary (based on
-- file modification time), and returns it to you as an 'Asset' (or an
-- 'AssetError', if something went wrong).
findAsset :: Herringbone
-> LogicalPath
-> IO (Either AssetError Asset)
findAsset hb path = do
mapping <- getBuildMapping hb
findAssetWithMapping hb path mapping
findAssetWithMapping :: Herringbone
-> LogicalPath
-> BuildMapping
-> IO (Either AssetError Asset)
findAssetWithMapping hb path mapping =
case specs of
[] -> return . Left $ AssetNotFound
[x] -> buildAsset hb x
xs -> return . Left $ AmbiguousSources (map getSource xs)
where
getSource (BuildSpec s _ _) = s
getDest (BuildSpec _ d _) = d
destPath = toFilePath path
specs = filter ((== destPath) . getDest) mapping