Rev 30 | Blame | Compare with Previous | Last modification | View Log | RSS feed
---- Licensed to the Apache Software Foundation (ASF) under one-- or more contributor license agreements. See the NOTICE file-- distributed with this work for additional information-- regarding copyright ownership. The ASF licenses this file-- to you 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.--module Thrift.Transport( Transport(..), TransportExn(..), TransportExnType(..)) whereimport Control.Monad ( when )import Control.Exception ( Exception, throw )import Data.Typeable ( Typeable )class Transport a wheretIsOpen :: a -> IO BooltClose :: a -> IO ()tRead :: a -> Int -> IO StringtWrite :: a -> String ->IO ()tFlush :: a -> IO ()tReadAll :: a -> Int -> IO StringtReadAll a 0 = return []tReadAll a len = doresult <- tRead a lenlet rlen = length resultwhen (rlen == 0) (throw $ TransportExn "Cannot read. Remote side has closed." TE_UNKNOWN)if len <= rlenthen return resultelse (result ++) `fmap` (tReadAll a (len - rlen))data TransportExn = TransportExn String TransportExnTypederiving ( Show, Typeable )instance Exception TransportExndata TransportExnType= TE_UNKNOWN| TE_NOT_OPEN| TE_ALREADY_OPEN| TE_TIMED_OUT| TE_END_OF_FILEderiving ( Eq, Show, Typeable )