github.com/sttk/sabi@v0.5.0/example_dax_test.go (about)

     1  package sabi_test
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  
     7  	"github.com/sttk/sabi"
     8  )
     9  
    10  func ExampleAddGlobalDaxSrc() {
    11  	sabi.AddGlobalDaxSrc("hoge", NewMapDaxSrc())
    12  
    13  	if sabi.StartUpGlobalDaxSrcs().IsNotOk() {
    14  		return
    15  	}
    16  	defer sabi.ShutdownGlobalDaxSrcs()
    17  
    18  	base := sabi.NewDaxBase()
    19  
    20  	type MyDax struct {
    21  		sabi.Dax
    22  	}
    23  
    24  	dax := MyDax{Dax: base}
    25  
    26  	conn, err := sabi.GetDaxConn[MapDaxConn](dax, "hoge")
    27  	fmt.Printf("conn = %v\n", reflect.TypeOf(conn))
    28  	fmt.Printf("err.IsOk() = %t\n", err.IsOk())
    29  
    30  	// Output:
    31  	// conn = sabi_test.MapDaxConn
    32  	// err.IsOk() = true
    33  
    34  	ClearDaxBase()
    35  }
    36  
    37  func ExampleStartUpGlobalDaxSrcs() {
    38  	sabi.AddGlobalDaxSrc("hoge", NewMapDaxSrc())
    39  
    40  	if err := sabi.StartUpGlobalDaxSrcs(); err.IsNotOk() {
    41  		return
    42  	}
    43  	defer sabi.ShutdownGlobalDaxSrcs()
    44  
    45  	sabi.AddGlobalDaxSrc("fuga", NewMapDaxSrc())
    46  
    47  	base := sabi.NewDaxBase()
    48  
    49  	type MyDax struct {
    50  		sabi.Dax
    51  	}
    52  
    53  	dax := MyDax{Dax: base}
    54  
    55  	conn, err := sabi.GetDaxConn[MapDaxConn](dax, "hoge")
    56  	fmt.Printf("conn = %v\n", reflect.TypeOf(conn))
    57  	fmt.Printf("err.IsOk() = %v\n", err.IsOk())
    58  
    59  	conn, err = sabi.GetDaxConn[MapDaxConn](dax, "fuga")
    60  	fmt.Printf("conn = %v\n", reflect.TypeOf(conn))
    61  	fmt.Printf("err.IsOk() = %t\n", err.IsOk())
    62  	fmt.Printf("err.Error() = %s\n", err.Error())
    63  
    64  	// Output:
    65  	// conn = sabi_test.MapDaxConn
    66  	// err.IsOk() = true
    67  	// conn = sabi_test.MapDaxConn
    68  	// err.IsOk() = false
    69  	// err.Error() = {reason=DaxSrcIsNotFound, Name=fuga}
    70  
    71  	ClearDaxBase()
    72  }
    73  
    74  func ExampleDaxBase_SetUpLocalDaxSrc() {
    75  	base := sabi.NewDaxBase()
    76  	defer base.FreeAllLocalDaxSrcs()
    77  
    78  	base.SetUpLocalDaxSrc("hoge", NewMapDaxSrc())
    79  
    80  	type MyDax struct {
    81  		sabi.Dax
    82  	}
    83  
    84  	dax := MyDax{Dax: base}
    85  
    86  	conn, err := sabi.GetDaxConn[MapDaxConn](dax, "hoge")
    87  	fmt.Printf("conn = %v\n", reflect.TypeOf(conn))
    88  	fmt.Printf("err.IsOk() = %v\n", err.IsOk())
    89  
    90  	// Output:
    91  	// conn = sabi_test.MapDaxConn
    92  	// err.IsOk() = true
    93  
    94  	ClearDaxBase()
    95  }
    96  
    97  type GettingDax struct {
    98  	sabi.Dax
    99  }
   100  
   101  func (dax GettingDax) GetData() (string, sabi.Err) {
   102  	conn, err := sabi.GetDaxConn[MapDaxConn](dax, "hoge")
   103  	if !err.IsOk() {
   104  		return "", err
   105  	}
   106  	data := conn.dataMap["hogehoge"]
   107  	return data, err
   108  }
   109  
   110  type SettingDax struct {
   111  	sabi.Dax
   112  }
   113  
   114  func (dax SettingDax) SetData(data string) sabi.Err {
   115  	conn, err := sabi.GetDaxConn[MapDaxConn](dax, "fuga")
   116  	if !err.IsOk() {
   117  		return err
   118  	}
   119  	conn.dataMap["fugafuga"] = data
   120  	return err
   121  }
   122  
   123  func ExampleDax() {
   124  	// type GettingDax struct {
   125  	//   sabi.Dax
   126  	// }
   127  	// func (dax GettingDax) GetData() (string, sabi.Err) {
   128  	//   conn, err := dax.getDaxConn("hoge")
   129  	//   if !err.IsOk() {
   130  	//     return nil, err
   131  	//   }
   132  	//   return conn.(MapDaxConn).dataMap["hogehoge"], err
   133  	// }
   134  	//
   135  	// type SettingDax struct {
   136  	//   sabi.Dax
   137  	// }
   138  	// func (dax SettingDax) SetData(data string) sabi.Err {
   139  	//   conn, err := dax.getDaxConn("fuga")
   140  	//   if !err.IsOk() {
   141  	//     return nil, err
   142  	//   }
   143  	//   conn.(MapDaxConn).dataMap["fugafuga"] = data
   144  	//   return err
   145  	// }
   146  
   147  	hogeDs := NewMapDaxSrc()
   148  	fugaDs := NewMapDaxSrc()
   149  
   150  	base := sabi.NewDaxBase()
   151  	defer base.FreeAllLocalDaxSrcs()
   152  
   153  	if err := base.SetUpLocalDaxSrc("hoge", hogeDs); err.IsNotOk() {
   154  		return
   155  	}
   156  	if err := base.SetUpLocalDaxSrc("fuga", fugaDs); err.IsNotOk() {
   157  		return
   158  	}
   159  
   160  	base = struct {
   161  		sabi.DaxBase
   162  		GettingDax
   163  		SettingDax
   164  	}{
   165  		DaxBase:    base,
   166  		GettingDax: GettingDax{Dax: base},
   167  		SettingDax: SettingDax{Dax: base},
   168  	}
   169  
   170  	type DaxForLogic interface {
   171  		GetData() (string, sabi.Err)
   172  		SetData(data string) sabi.Err
   173  	}
   174  
   175  	hogeDs.dataMap["hogehoge"] = "hello"
   176  	err := sabi.RunTxn(base, func(dax DaxForLogic) sabi.Err {
   177  		data, err := dax.GetData()
   178  		if !err.IsOk() {
   179  			return err
   180  		}
   181  		err = dax.SetData(data)
   182  		return err
   183  	})
   184  	fmt.Printf("%t\n", err.IsOk())
   185  	fmt.Printf("%s\n", fugaDs.dataMap["fugafuga"])
   186  
   187  	// Output:
   188  	// true
   189  	// hello
   190  }