#pragma once #include "store-api.hh" namespace nix { /** * Helper to try downcasting a Store with a nice method if it fails. * * This is basically an alternative to the user-facing part of * Store::unsupported that allows us to still have a nice message but * better interface design. */ template T & require(Store & store) { auto * castedStore = dynamic_cast(&store); if (!castedStore) throw UsageError("%s not supported by store '%s'", T::operationName, store.getUri()); return *castedStore; } }