passman-core-0.1.0.0: src/Passman/Core/Entry/Lens.hs
-- 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 <https://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
-- |
-- Module : Passman.Core.PassList.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