Просмотр исходного кода

Improve the gen_fsm template

* Rename and add the default state functions `state_name/2,3`
* Rename the variable `State` into `StateData` as per documentation
Loïc Hoguin 10 лет назад
Родитель
Сommit
68c888981b
2 измененных файлов с 68 добавлено и 10 удалено
  1. 50 0
      erlang.mk
  2. 18 10
      plugins/bootstrap.mk

+ 50 - 0
erlang.mk

@@ -416,6 +416,56 @@ tpl_gen_server = "-module($(n))." \
 	"" \
 	"code_change(_OldVsn, State, _Extra) ->" \
 	"	{ok, State}."
+tpl_gen_fsm = "-module($(n))." \
+	"-behaviour(gen_fsm)." \
+	"" \
+	"%% API." \
+	"-export([start_link/0])." \
+	"" \
+	"%% gen_fsm." \
+	"-export([init/1])." \
+	"-export([state_name/2])." \
+	"-export([handle_event/3])." \
+	"-export([state_name/3])." \
+	"-export([handle_sync_event/4])." \
+	"-export([handle_info/3])." \
+	"-export([terminate/3])." \
+	"-export([code_change/4])." \
+	"" \
+	"-record(state, {" \
+	"})." \
+	"" \
+	"%% API." \
+	"" \
+	"-spec start_link() -> {ok, pid()}." \
+	"start_link() ->" \
+	"	gen_fsm:start_link(?MODULE, [], [])." \
+	"" \
+	"%% gen_fsm." \
+	"" \
+	"init([]) ->" \
+	"	{ok, state_name, \#state{}}." \
+	"" \
+	"state_name(_Event, StateData) ->" \
+	"	{next_state, state_name, StateData}." \
+	"" \
+	"handle_event(_Event, StateName, StateData) ->" \
+	"	{next_state, StateName, StateData}." \
+	"" \
+	"state_name(_Event, _From, StateData) ->" \
+	"	{reply, ignored, state_name, StateData}." \
+	"" \
+	"handle_sync_event(_Event, _From, StateName, StateData) ->" \
+	"	{reply, ignored, StateName, StateData}." \
+	"" \
+	"handle_info(_Info, StateName, StateData) ->" \
+	"	{next_state, StateName, StateData}." \
+	"" \
+	"terminate(_Reason, _StateName, _StateData) ->" \
+	"	ok." \
+	"" \
+	"code_change(_OldVsn, StateName, StateData, _Extra) ->" \
+	"	{ok, StateName, StateData}."
 tpl_cowboy_http = "-module($(n))." \
 	"-behaviour(cowboy_http_handler)." \
 	"" \

+ 18 - 10
plugins/bootstrap.mk

@@ -125,7 +125,9 @@ tpl_gen_fsm = "-module($(n))." \
 	"" \
 	"%% gen_fsm." \
 	"-export([init/1])." \
+	"-export([state_name/2])." \
 	"-export([handle_event/3])." \
+	"-export([state_name/3])." \
 	"-export([handle_sync_event/4])." \
 	"-export([handle_info/3])." \
 	"-export([terminate/3])." \
@@ -143,22 +145,28 @@ tpl_gen_fsm = "-module($(n))." \
 	"%% gen_fsm." \
 	"" \
 	"init([]) ->" \
-	"	{ok, initial_state, \#state{}}." \
+	"	{ok, state_name, \#state{}}." \
 	"" \
-	"handle_event(_Event, StateName, State) ->" \
-	"	{next_state, StateName, State}." \
+	"state_name(_Event, StateData) ->" \
+	"	{next_state, state_name, StateData}." \
 	"" \
-	"handle_sync_event(_Event, _From, StateName, State) ->" \
-	"	{reply, ignored, StateName, State}." \
+	"handle_event(_Event, StateName, StateData) ->" \
+	"	{next_state, StateName, StateData}." \
 	"" \
-	"handle_info(_Info, StateName, State) ->" \
-	"	{next_state, StateName, State}." \
+	"state_name(_Event, _From, StateData) ->" \
+	"	{reply, ignored, state_name, StateData}." \
 	"" \
-	"terminate(_Reason, _StateName, _State) ->" \
+	"handle_sync_event(_Event, _From, StateName, StateData) ->" \
+	"	{reply, ignored, StateName, StateData}." \
+	"" \
+	"handle_info(_Info, StateName, StateData) ->" \
+	"	{next_state, StateName, StateData}." \
+	"" \
+	"terminate(_Reason, _StateName, _StateData) ->" \
 	"	ok." \
 	"" \
-	"code_change(_OldVsn, StateName, State, _Extra) ->" \
-	"	{ok, StateName, State}."
+	"code_change(_OldVsn, StateName, StateData, _Extra) ->" \
+	"	{ok, StateName, StateData}."
 tpl_cowboy_http = "-module($(n))." \
 	"-behaviour(cowboy_http_handler)." \
 	"" \