{"record":{"id":"094221006e8b783a","repo":"kataras/iris","slug":"parameter-is-not-a-valid-weekday","errorCode":null,"errorMessage":"parameter is not a valid weekday","messagePattern":"parameter is not a valid weekday","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"macro/macros.go","lineNumber":473,"sourceCode":"\t\t}\n\n\t\treturn paramValue, true\n\t})\n\n\tsimpleDateLayout = \"2006/01/02\"\n\n\t// Date type.\n\tDate = NewMacro(\"date\", \"\", time.Time{}, false, true, func(paramValue string) (any, bool) {\n\t\ttt, err := time.Parse(simpleDateLayout, paramValue)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"%s: %w\", paramValue, err), false\n\t\t}\n\n\t\treturn tt, true\n\t})\n\n\t// ErrParamNotWeekday is fired when the parameter value is not a form of a time.Weekday.\n\tErrParamNotWeekday = errors.New(\"parameter is not a valid weekday\")\n\tlongDayNames       = map[string]time.Weekday{\n\t\t\"Sunday\":    time.Sunday,\n\t\t\"Monday\":    time.Monday,\n\t\t\"Tuesday\":   time.Tuesday,\n\t\t\"Wednesday\": time.Wednesday,\n\t\t\"Thursday\":  time.Thursday,\n\t\t\"Friday\":    time.Friday,\n\t\t\"Saturday\":  time.Saturday,\n\t\t// lowercase.\n\t\t\"sunday\":    time.Sunday,\n\t\t\"monday\":    time.Monday,\n\t\t\"tuesday\":   time.Tuesday,\n\t\t\"wednesday\": time.Wednesday,\n\t\t\"thursday\":  time.Thursday,\n\t\t\"friday\":    time.Friday,\n\t\t\"saturday\":  time.Saturday,\n\t}\n","sourceCodeStart":455,"sourceCodeEnd":491,"githubUrl":"https://github.com/kataras/iris/blob/7bedaf55a0b64bbb2248a5845a2c60d81a30996a/macro/macros.go#L455-L491","documentation":"ErrParamNotWeekday is fired when a path parameter evaluated by the 'weekday' macro is not one of Go's long day names (Sunday, Monday, ..., Saturday), which map to time.Weekday values. The value must match a day name exactly (case-sensitive).","triggerScenarios":"Route like app.Get('/schedule/{day:weekday}', h) with requests such as '/schedule/monday' (lowercase), '/schedule/Mon', or '/schedule/1' — only exact long names pass.","commonSituations":"Clients send abbreviated day names or non-English day names; case-sensitivity surprises (monday vs Monday); dates passed instead of day names.","solutions":["Send the exact capitalized long day name, e.g. /schedule/Monday.","Handle normalization in a custom macro (e.g. title-case input before lookup).","Use {day:string} and parse/validate manually if you need flexible input formats."],"exampleFix":"// before\n// GET /schedule/monday -> error\n\n// after\n// GET /schedule/Monday\napp.Get(\"/schedule/{day:weekday}\", h)","handlingStrategy":"validation","validationCode":"const LONG_DAYS = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];\nif (!LONG_DAYS.includes(day)) day = LONG_DAYS[new Date(`${day} 1 2020`).getDay()] ?? 'Monday';","typeGuard":"const LONG_DAYS = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'] as const;\nfunction isWeekdayName(v: string): v is typeof LONG_DAYS[number] {\n  return (LONG_DAYS as readonly string[]).includes(v);\n}","tryCatchPattern":null,"preventionTips":["Always send exact capitalized long day names.","Normalize case client-side before building the URL.","Reject abbreviated day names in forms."],"tags":["routing","validation","time","iris"],"backgroundTag":"param-type-mismatch","analyzedSha":"7bedaf55a0b64bbb2248a5845a2c60d81a30996a","analyzedAt":"2026-08-30T20:38:16.250Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}