Jonas Drewsen wrote: >> Do you plan to add some kind of support for header parsing? I think >> something like what the .net webclient uses >> ( >> http://msdn.microsoft.com/en-us/library/system.net.webclient(v=VS.100).aspx ) >> would be great. Especially the HeaderCollection supporting headers as >> strings and as data types (for both parsing and formatting), but >> without a class hierarchy for the headers, using templates instead. > >It would be nice to be able to get/set headers by string and enums >(http://msdn.microsoft.com/en-us/library/system.net.httprequestheader.aspx). >But I cannot see that .net is using datatypes or templates for it. >Could you give me a pointer please? >
You're right I didn't look close enough at the .net documentation. I thought HttpRequestHeader is a class. What I meant for D was something like this: struct ETagHeader { //Data members bool Weak = false; string Value; //All header structs provide these static string Key = "ETag"; static ETagHeader parse(string value) { //parser logic here } void format(T writer) if (isOutputRange!(T, string)) { if(etag.Weak) writer.put("W/"); assert(etag.Value != ""); writer.put(quote(etag.Value)); } } Then we can offer methods like these: setHeader(T)(T header) if(isHeader(T)) { headers[T.Key] = formatHeader(header); } T getHeader(T type)() if(isHeader(T)) { if(!T.Key in headers) throw Exception(); return T.parse(headers[T.key]); } So user code wouldn't have to deal with header parsing / formatting: auto etag = client.getHeader!ETagHeader(); assert(etag.Weak); >> I've written D parsers/formatters for almost all headers in >> rfc2616 (1 or 2 might be missing) and for a few additional commonly >> used headers (Content-Disposition, cookie headers). The parsers are >> written with ragel and are to be used with curl (continuations must >> be removed and the parsers always take 1 line of input, just as you >> get it from curl). Right now only the client side is implemented (no >> parsers for headers which can only be sent from client-->server ). >> However, I need to add some more documentation to the parsers, need >> to do some refactoring and I've got absolutely no time for that in >> the next 2 weeks ('abitur' final exams). But if you could wait 2 >> weeks or if you wanted to do the refactoring yourself, I would be >> happy to contribute that code. > >That sounds very interesting. I would very much like to see the code >and see if fits in. Ok, here it is, but it seriously needs to be refactored and documented: https://gist.github.com/869324 -- Johannes Pfau
signature.asc
Description: PGP signature