defmodule Phone.Helper.Parser do @moduledoc false defmacro parser(country, code) do quote do def parse(unquote(country), number) when is_bitstring(number) do parse(unquote(code) <> number) end def parse(unquote(country), number) when is_integer(number) do number = Integer.to_string(number) parse(unquote(code) <> number) end def parse(unquote(country), _) do parse(unquote(country)) end end end defmacro country_parser do quote do parser :ad, "376" parser :ae, "971" parser :af, "93" parser :al, "355" parser :am, "374" parser :ao, "244" parser :ar, "54" parser :at, "43" parser :aw, "297" parser :az, "994" parser :ba, "387" parser :bd, "880" parser :be, "32" parser :bg, "359" parser :bh, "973" parser :bi, "257" parser :bj, "229" parser :bn, "673" parser :bo, "591" parser :br, "55" parser :bt, "975" parser :bw, "267" parser :by, "375" parser :bz, "501" parser :cd, "243" parser :cf, "236" parser :cg, "242" parser :ch, "41" parser :ci, "225" parser :ck, "682" parser :cl, "56" parser :cm, "237" parser :cn, "86" parser :co, "57" parser :cr, "506" parser :cu, "53" parser :cv, "238" parser :cw, "599" parser :cy, "357" parser :cz, "420" parser :de, "49" parser :dj, "253" parser :dk, "45" parser :dz, "213" parser :ec, "593" parser :ee, "372" parser :eg, "20" parser :er, "291" parser :es, "34" parser :et, "251" parser :fi, "358" parser :fj, "679" parser :fm, "691" parser :fo, "298" parser :fr, "33" parser :ga, "241" parser :gb, "44" parser :ge, "995" parser :gf, "594" parser :gh, "233" parser :gi, "350" parser :gl, "299" parser :gm, "220" parser :gn, "224" parser :gq, "240" parser :gt, "502" parser :gw, "245" parser :gy, "592" parser :gr, "30" parser :uk, "30" parser :hk, "852" parser :hn, "504" parser :hr, "385" parser :ht, "509" parser :hu, "36" parser :id, "62" parser :ie, "353" parser :il, "972" parser :in, "91" parser :io, "246" parser :iq, "964" parser :ir, "98" parser :is, "353" parser :it, "39" parser :jo, "962" parser :jp, "81" parser :ke, "254" parser :kg, "996" parser :kh, "855" parser :ki, "686" parser :km, "269" parser :kp, "850" parser :kr, "82" parser :kw, "965" parser :kz, "7" parser :la, "856" parser :lb, "961" parser :li, "423" parser :lk, "94" parser :lr, "231" parser :ls, "266" parser :lt, "370" parser :lu, "352" parser :lv, "371" parser :ly, "218" parser :ma, "212" parser :mc, "377" parser :md, "373" parser :me, "382" parser :mg, "261" parser :mh, "692" parser :mk, "389" parser :ml, "223" parser :mm, "95" parser :mn, "976" parser :mo, "853" parser :mq, "596" parser :mr, "222" parser :mt, "356" parser :mu, "230" parser :mv, "960" parser :mw, "265" parser :mx, "52" parser :my, "60" parser :mz, "258" parser :nanp, "1" parser :ag, "1" parser :ai, "1" parser :as, "1" parser :bb, "1" parser :bm, "1" parser :bs, "1" parser :ca, "1" parser :dm, "1" parser :do, "1" parser :gd, "1" parser :gu, "1" parser :jm, "1" parser :kn, "1" parser :ky, "1" parser :lc, "1" parser :mp, "1" parser :ms, "1" parser :pr, "1" parser :sx, "1" parser :tc, "1" parser :tt, "1" parser :us, "1" parser :vc, "1" parser :vg, "1" parser :vi, "1" parser :na, "264" parser :nc, "687" parser :ne, "227" parser :ng, "234" parser :ni, "505" parser :nl, "31" parser :no, "47" parser :np, "977" parser :nr, "674" parser :nu, "683" parser :nz, "64" parser :om, "968" parser :pa, "507" parser :pe, "51" parser :pf, "689" parser :pg, "675" parser :ph, "63" parser :pk, "92" parser :pl, "48" parser :pm, "508" parser :ps, "970" parser :pt, "351" parser :pw, "680" parser :py, "595" parser :qa, "974" parser :ro, "40" parser :rs, "381" parser :ru, "7" parser :rw, "250" parser :sa, "966" parser :sb, "677" parser :sc, "248" parser :sd, "249" parser :se, "46" parser :sg, "65" parser :sh, "290" parser :si, "386" parser :sk, "421" parser :sl, "232" parser :sm, "378" parser :sn, "221" parser :so, "252" parser :sr, "597" parser :ss, "211" parser :st, "239" parser :sv, "503" parser :sy, "963" parser :sz, "268" parser :td, "235" parser :tg, "228" parser :th, "66" parser :tj, "992" parser :tk, "690" parser :tl, "670" parser :tm, "993" parser :tn, "216" parser :to, "676" parser :tr, "90" parser :tv, "688" parser :tw, "886" parser :tz, "255" parser :ua, "380" parser :ug, "256" parser :uy, "598" parser :uz, "998" parser :ve, "58" parser :vn, "84" parser :vu, "678" parser :wf, "681" parser :ws, "685" parser :ye, "967" parser :za, "27" parser :zm, "260" parser :zw, "263" end end end