Paste number 55628: broken responders-definer

Index of paste annotations: 1

Paste number 55628: broken responders-definer
Pasted by: turbo24prg
6 months, 2 weeks ago
#dylan | Context in IRC logs
Paste contents:
Raw Source | XML | Display As
define responders
  "/about"
    get () => show-about;
end;


define macro responders-definer
  { define responders
      ?responders:*
    end }
   => { ?responders }

  responders:
    { } => { }
    { ?responder:* ... } => { ?responder ... }

  responder:
    { ?url:expression ?responder-methods:* }
     => { begin
            let responder = make(<responder>);
            ?responder-methods
            add-responder(?url, responder);
          end }

  responder-methods:
    { } => { }
    { ?responder-method:* ; ... } => { ?responder-method ; ... }

  responder-method:
    { ?request-method:expression ( ?regex:* ) =>
      ?actions:* }
     => { begin
            let map = element(responder.responder-map,
                              ?#"request-method",
                              default: #f);
            unless (map)
              map := make(<table>);
              responder.responder-map[?#"request-method"] := map;
            end unless;
            map[compile-regex(?regex)] := list(?actions);
          end }

  regex:
    { } => { "^$" }
    { ?pattern:expression } => { ?pattern }


// do(method (foo) foo() | error(<action-sequence-error>) end, ...)

end macro responders-definer;


Annotations for this paste:

Annotation number 1: another try, still not working
Pasted by: turbo24prg
6 months, 2 weeks ago
Context in IRC logs
Paste contents:
Raw Source | Display As
define responders
  "/foo"
    get () => (test, foo-get),
    post () => (foo-post);
  "/bar"
    post () => (bar-post);
end;



Invalid syntax in macro-case macro call.


define macro responders-definer
  { define responders
      ?responders:*
    end }
   => { ?responders }

  responders:
    { } => { }
    { ?responder:* ; ... } => { ?responder ; ... }

  responder:
    { ?url:* ?responder-methods:* }
     => { begin
            let responder = make(<responder>);
            ?responder-methods
            add-responder(?url, responder);
          end }

  responder-methods:
    { } => { }
    { ?responder-method:* , ... } => { ?responder-method ; ... }

  responder-method:
    { ?request-method:* ( ?regex:* ) => ( ?actions:* ) }
     => { begin
            let map = element(responder.responder-map,
                              ?#"request-method",
                              default: #f);
            unless (map)
              map := make(<table>);
              responder.responder-map[?#"request-method"] := map;
            end unless;
            map[compile-regex(?regex)] := list(?actions);
          end }

  regex:
    { } => { "^$" }
    { ?pattern:* } => { ?pattern }


// do(method (foo) foo() | error(<action-sequence-error>) end, ...)

end macro responders-definer;

Colorize as:
Show Line Numbers
Index of paste annotations: 1

Ads absolutely not by Google

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.