-- Copyright (C) 2017 Matthew Harm Bekkema -- -- This file is part of passman-core -- -- passman-core is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- passman-core is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . ----------------------------------------------------------------------------- -- | -- Module : Passman.Core.Entry.Lens -- Copyright : Matthew Harm Bekkema 2017 -- License : GPL-3 -- Maintainer : mbekkema97@gmail.com ----------------------------------------------------------------------------- module Passman.Core.Entry.Lens ( -- * Data structures E.Entry (Entry) , info , maxLength , mode -- * Parsing , E.load , E.textToEntry , E.csvToEntry -- * Saving , E.save , E.append , E.entryToText , E.entryToCsv ) where import Numeric.Natural (Natural) import Passman.Core.Info (Info) import Passman.Core.Mode (Mode) import qualified Passman.Core.Entry as E -- | The info string to generate the password for. info :: Functor f => (Info -> f Info) -> E.Entry -> f E.Entry info f (E.Entry a b c) = flip (flip E.Entry b) c <$> f a -- | Maximum length of the generated password or 0 if no maximum length. maxLength :: Functor f => (Natural -> f Natural) -> E.Entry -> f E.Entry maxLength f (E.Entry a b c) = flip (E.Entry a) c <$> f b -- | The mode to use when generating the password. mode :: Functor f => (Mode -> f Mode) -> E.Entry -> f E.Entry mode f (E.Entry a b c) = E.Entry a b <$> f c