packages feed

haskell-aliyun-0.1.0.0: test.hs

{-# LANGUAGE OverloadedStrings #-}
import qualified Prelude
import BasicPrelude
import Network.Aliyun
import Data.Default (def)
import qualified Data.Text.Encoding as T
import Data.ByteString.Lazy.Char8 ()
import qualified Data.Conduit as C
import qualified Data.Conduit.List as C

{-
 - Before run test.hs, create a file named "config" in current directory,
 - which contains two lines, the first line is identity, second line is secret key.
 -}

loadConf :: FilePath -> IO YunConf
loadConf path = do
    (ident : key : _) <- lines <$> readFile path
    return $ YunConf "storage.aliyun.com" (T.encodeUtf8 ident) (T.encodeUtf8 key)

p :: (MonadIO m, Show a) => m a -> m ()
p m = m >>= liftIO . putStrLn . show

main :: IO ()
main = do
    conf <- loadConf "./config"
    runYun conf $ do
        --liftIO $ putStrLn "put stream object test4"
        --p $ putObjectStream "yihuang_bucket" "test4" (C.sourceList ["hello", "world"] C.$= C.map B.fromByteString)

        liftIO $ putStrLn "list service"
        p listService
        liftIO $ putStrLn "put bucket"
        p $ putBucket "yihuang_bucket" Nothing
        liftIO $ putStrLn "list service"
        p listService
        liftIO $ putStrLn "get bucket"
        p $ getBucket "yihuang_bucket" def
        liftIO $ putStrLn "get bucket acl"
        p $ getBucketACL "yihuang_bucket"
        liftIO $ putStrLn "put bucket acl"
        p $ putBucket "yihuang_bucket" (Just "public-read-write")
        liftIO $ putStrLn "get bucket acl"
        p $ getBucketACL "yihuang_bucket"
        liftIO $ putStrLn "put string object test1"
        p $ putObjectStr "yihuang_bucket" "test1" "hello world"
        liftIO $ putStrLn "put file object test2"
        p $ putObjectFile "yihuang_bucket" "test2" "./data"
        liftIO $ putStrLn "get bucket"
        p $ getBucket "yihuang_bucket" def
        p $ getBucket "yihuang_bucket" def{qryMaxKeys=1}
        p $ getBucketContents "yihuang_bucket" def{qryMaxKeys=1} C.$$ C.consume
        liftIO $ putStrLn "get object test1"
        p $ getObject "yihuang_bucket" "test1"
        liftIO $ putStrLn "get object test2"
        p $ getObject "yihuang_bucket" "test2"
        liftIO $ putStrLn "get object range test2"
        p $ getObjectRange "yihuang_bucket" "test2" (Just "6-11")
        liftIO $ putStrLn "copy object test3"
        p $ copyObject "yihuang_bucket" "test3" "/yihuang_bucket/test2"
        liftIO $ putStrLn "head object test3"
        p $ headObject "yihuang_bucket" "test3"
        liftIO $ putStrLn "delete object test3"
        p $ deleteObject "yihuang_bucket" "test3"
        liftIO $ putStrLn "delete multiple objects test1 test2"
        p $ deleteObjects "yihuang_bucket" ["test1", "test2"] True