Skip to content

Commit 45e531f

Browse files
committed
API change for userInfo, minor style changes
1 parent 45024fe commit 45e531f

File tree

3 files changed

+77
-51
lines changed

3 files changed

+77
-51
lines changed

bower.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"dependencies": {
1919
"purescript-prelude": "^4.1.0",
2020
"purescript-datetime": "^4.0.0",
21-
"purescript-foreign-object": "^1.0.0"
21+
"purescript-foreign-object": "^1.0.0",
22+
"purescript-node-buffer": "^5.0.0"
2223
},
2324
"devDependencies": {
2425
"purescript-psci-support": "^4.0.0"

src/Node/OS.purs

Lines changed: 63 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,47 @@ module Node.OS
1616
, totalmem
1717
, ostype
1818
, uptime
19-
, userInfo
19+
, userInfo, BufferEncoding(..)
2020
) where
2121

2222
import Prelude
23-
23+
2424
import Data.Array ((!!))
25+
import Data.Either (Either(..))
2526
import Data.Maybe (Maybe(..), fromMaybe)
2627
import Data.Time.Duration (Milliseconds, Seconds)
27-
import Foreign.Object (Object, update)
2828
import Effect (Effect)
29+
import Foreign.Object (Object, update)
30+
import Node.Encoding (Encoding)
2931

30-
type NetworkInterface = { address :: String
31-
, netmask :: String
32-
, family :: String
33-
, mac :: String
34-
, internal :: Boolean
35-
}
36-
37-
type CPU = { model :: String
38-
, speed :: Int
39-
, times :: { user :: Milliseconds
40-
, nice :: Milliseconds
41-
, sys :: Milliseconds
42-
, idle :: Milliseconds
43-
, irq :: Milliseconds } }
32+
type NetworkInterface =
33+
{ address :: String
34+
, netmask :: String
35+
, family :: String
36+
, mac :: String
37+
, internal :: Boolean
38+
}
39+
40+
type CPU =
41+
{ model :: String
42+
, speed :: Int
43+
, times ::
44+
{ user :: Milliseconds
45+
, nice :: Milliseconds
46+
, sys :: Milliseconds
47+
, idle :: Milliseconds
48+
, irq :: Milliseconds
49+
}
50+
}
4451

4552
loadavg :: Effect { one :: Number, five :: Number, fifteen :: Number }
46-
loadavg = pure <<< fromMaybe {one: 0.0, five: 0.0, fifteen: 0.0} <<< extract =<< loadavgImpl
53+
loadavg = fromMaybe {one: 0.0, five: 0.0, fifteen: 0.0} <<< extract <$> loadavgImpl
4754
where
48-
extract xs = {one: _, five: _, fifteen: _} <$> xs !! 0 <*> xs !! 1 <*> xs !! 2
55+
extract xs = ado
56+
one <- xs !! 0
57+
five <- xs !! 1
58+
fifteen <- xs !! 2
59+
in {one, five, fifteen}
4960

5061
data Arch = X64 | ARM | IA32 | UnknownArch
5162

@@ -61,10 +72,10 @@ arch :: Effect Arch
6172
arch = do
6273
a <- archImpl
6374
pure case a of
64-
"x64" -> X64
65-
"arm" -> ARM
66-
"ia32" -> IA32
67-
_ -> UnknownArch
75+
"x64" -> X64
76+
"arm" -> ARM
77+
"ia32" -> IA32
78+
_ -> UnknownArch
6879

6980
data Endianness = LittleEndian | BigEndian | UnknownEndian
7081

@@ -79,33 +90,34 @@ endianness :: Effect Endianness
7990
endianness = do
8091
e <- endiannessImpl
8192
pure case e of
82-
"BE" -> BigEndian
83-
"LE" -> LittleEndian
84-
_ -> UnknownEndian
93+
"BE" -> BigEndian
94+
"LE" -> LittleEndian
95+
_ -> UnknownEndian
8596

8697
data Platform = Darwin | FreeBSD | Linux | SunOS | Win32 | UnknownPlatform
8798

8899
derive instance eqPlatform :: Eq Platform
89100

90101
instance showPlatform :: Show Platform where
91-
show Darwin = "Darwin"
92-
show FreeBSD = "FreeBSD"
93-
show Linux = "Linux"
94-
show SunOS = "SunOS"
95-
show Win32 = "Win32"
96-
show UnknownPlatform = "UnknownPlatform"
102+
show = case _ of
103+
Darwin -> "Darwin"
104+
FreeBSD -> "FreeBSD"
105+
Linux -> "Linux"
106+
SunOS -> "SunOS"
107+
Win32 -> "Win32"
108+
UnknownPlatform -> "UnknownPlatform"
97109

98110
platform :: Effect Platform
99111
platform = do
100112
p <- platformImpl
101113
pure case p of
102-
"linux" -> Linux
103-
"darwin" -> Darwin
104-
"win32" -> Win32
105-
"freebsd" -> FreeBSD
106-
"sunos" -> SunOS
107-
_ -> UnknownPlatform
108-
114+
"linux" -> Linux
115+
"darwin" -> Darwin
116+
"win32" -> Win32
117+
"freebsd" -> FreeBSD
118+
"sunos" -> SunOS
119+
_ -> UnknownPlatform
120+
109121
type UserInfo =
110122
{ uid :: Int
111123
, gid :: Int
@@ -114,8 +126,14 @@ type UserInfo =
114126
, shell :: Maybe String
115127
}
116128

117-
userInfo :: {encoding :: String} -> Effect UserInfo
118-
userInfo = userInfoImpl (flip update "shell") Nothing Just
129+
userInfo :: Either Encoding BufferEncoding -> Effect UserInfo
130+
userInfo enc = userInfoImpl (update <@> "shell") Nothing Just enc'
131+
where
132+
enc' = case enc of
133+
Left e -> {encoding: show e}
134+
_ -> {encoding: "buffer"}
135+
136+
data BufferEncoding = BufferEncoding
119137

120138
foreign import eol :: Char
121139
foreign import archImpl :: Effect String
@@ -131,12 +149,10 @@ foreign import tmpdir :: Effect String
131149
foreign import totalmem :: Effect Number
132150
foreign import ostype :: Effect String
133151
foreign import uptime :: Effect Seconds
134-
foreign import networkInterfaces
135-
:: Effect (Object (Array NetworkInterface))
152+
foreign import networkInterfaces :: Effect (Object (Array NetworkInterface))
136153
foreign import userInfoImpl
137-
:: forall a
138-
. ((a -> Maybe a) -> Object a -> Object a)
139-
-> Maybe a
140-
-> (a -> Maybe a)
154+
:: ( a. (a -> Maybe a) -> Object a -> Object a)
155+
-> ( a. Maybe a)
156+
-> ( a. a -> Maybe a)
141157
-> {encoding :: String}
142158
-> Effect UserInfo

test/Main.purs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
module Test.Main where
22

3-
import Prelude (Unit)
3+
import Prelude
4+
5+
import Data.Either (Either(..))
46
import Effect (Effect)
5-
import Effect.Console (log)
7+
import Effect.Console (log, logShow)
8+
import Node.Encoding (Encoding(..))
9+
import Node.OS (arch, freemem, userInfo)
610

711
main :: Effect Unit
812
main = do
9-
log "You should add some tests."
13+
log "Username:"
14+
log <<< _.username =<< userInfo (Left UTF8)
15+
log "Freemem:"
16+
logShow =<< freemem
17+
log "Arch"
18+
logShow =<< arch

0 commit comments

Comments
 (0)