नौकर में यह सब कुछ करने के लिए नहीं है, हालांकि सभी आवश्यक भागों उपलब्ध हैं।
आरंभ करने से पहले, मुझे लगता है कि यदि आप एक सिंक को स्ट्रीम कर सकते हैं, इसका मतलब है कि आप एक स्रोत
सबसे पहले (GetObjectResponse
की gorsBody
एक RsBody
है, जो एक स्रोत है), नौकर प्रदान करता है HasServer
का नया उदाहरण बनाकर, नए रिटर्न प्रकारों के लिए समर्थन जोड़ने की संभावना के साथ, हम EitherT ServantErr IO (Source ...)
पर सेवा कर सकते हैं और इसे स्ट्रीम कर सकते हैं।
उस उदाहरण को बनाने के लिए, हमें route :: Proxy layout -> Server layout -> RoutingApplication
लागू करना होगा। Server layout
, इस मामले में, बस EitherT ServantErr IO layout
, layout
वह स्रोत है जिसे हम सर्वर बनाना चाहते हैं, इसलिए यह वह कार्य है जो स्रोत लौटाता है (और HTTP त्रुटि के साथ विफल हो सकता है)।
हम एक RoutingApplication
एक समारोह है कि एक Request
लेता है और एक RouteResult Response
देता है, जो या तो एक बेजोड़ मार्ग त्रुटि, या एक प्रतिक्रिया का मतलब है वापस जाने के लिए है, जो है (निरंतरता शैली में) है। Request
और Response
दोनों मानक वाई हैं, नौकर नहीं, इसलिए अब हम इसे पार करने के तरीके को खोजने के लिए शेष पारिस्थितिक तंत्र को देख सकते हैं।
सौभाग्य से, हम दूर जाने की आवश्यकता नहीं है: Network.Wai.Conduit
शामिल बस क्या हम route
समारोह लागू करने की आवश्यकता: responseSource
एक स्थिति मान, कुछ प्रतिक्रिया हेडर और अपने स्रोत लेता है और आप एक Response
देता है।
तो, यह करने के लिए काफी काम है, लेकिन हमें जो भी चाहिए वह वहां है। source of the instance HasServer * (Get ...)
देखकर मदद मिल सकती है।
वर्तमान में "स्ट्रीम एंडपॉइंट समर्थन" जोड़ने के लिए नौकर में एक पीआर है। https://github.com/haskell-servant/servant/pull/836 – erewok