blob: b025106ff49909e26b9e789678d21cea8f4f0433 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
-- Copyright 2016 Benjamin Barenblat
--
-- Licensed under the Apache License, Version 2.0 (the “License”); you may not
-- use this file except in compliance with the License. You may obtain a copy
-- of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an “AS IS” BASIS, WITHOUT
-- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-- License for the specific language governing permissions and limitations under
-- the License.
-- | Application configuration.
module Config
( Config(..)
, load
) where
import Control.Applicative ((<$>))
import Data.Bifunctor (bimap)
import qualified Data.ConfigFile as ConfigFile
data Config = Config
{ stopCapacity :: Int
-- ^ percentage charge required to enter the “fully charged” state
, stopCurrent :: Int
-- ^ maximum charge current (in microamperes, µA) to remain in the
-- “fully charged” state
, startCapacity :: Int
-- ^ percentage at or below which charging will begin
} deriving (Eq, Show)
defaultConfig :: Config
defaultConfig = Config
{ stopCapacity = 99
, stopCurrent = 80000
, startCapacity = 95
}
configFilePath :: FilePath
configFilePath = "/etc/pndpowerd.conf"
load :: IO (Either String Config)
load =
bimap show parse <$> ConfigFile.readfile ConfigFile.emptyCP configFilePath
parse :: ConfigFile.ConfigParser -> Config
parse serialized =
let get field name = either (const $ field defaultConfig) id $
ConfigFile.get serialized "DEFAULT" name
in Config { stopCapacity = get stopCapacity "stopCapacity"
, stopCurrent = get stopCurrent "stopCurrent"
, startCapacity = get startCapacity "startCapacity"
}
|